summaryrefslogtreecommitdiffstats
path: root/src/datavis3d
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavis3d')
-rw-r--r--src/datavis3d/Doxyfile1196
-rw-r--r--src/datavis3d/Mainpage.dox96
-rw-r--r--src/datavis3d/common.pri7
-rw-r--r--src/datavis3d/datavis3d.pro24
-rw-r--r--src/datavis3d/doc/qtdatavis3d.qdocconf47
-rw-r--r--src/datavis3d/documentationGroups.dox150
-rw-r--r--src/datavis3d/engine/engine.pri7
-rw-r--r--src/datavis3d/engine/engine.qrc21
-rw-r--r--src/datavis3d/engine/meshes/apeFlat.obj3488
-rw-r--r--src/datavis3d/engine/meshes/apeSmooth.obj3049
-rw-r--r--src/datavis3d/engine/meshes/backgroudFlat.obj32
-rw-r--r--src/datavis3d/engine/meshes/backgroudSmooth.obj36
-rw-r--r--src/datavis3d/engine/meshes/coneFlat.obj89
-rw-r--r--src/datavis3d/engine/meshes/coneSmooth.obj90
-rw-r--r--src/datavis3d/engine/meshes/cubeFlat.obj47
-rw-r--r--src/datavis3d/engine/meshes/cubeSmooth.obj50
-rw-r--r--src/datavis3d/engine/meshes/cylinderFlat.obj299
-rw-r--r--src/datavis3d/engine/meshes/cylinderSmooth.obj330
-rw-r--r--src/datavis3d/engine/meshes/pyramidFlat.obj22
-rw-r--r--src/datavis3d/engine/meshes/pyramidSmooth.obj23
-rw-r--r--src/datavis3d/engine/q3dbars.cpp625
-rw-r--r--src/datavis3d/engine/q3dbars.h60
-rw-r--r--src/datavis3d/engine/q3dbars_p.h73
-rw-r--r--src/datavis3d/engine/q3dwindow.cpp184
-rw-r--r--src/datavis3d/engine/q3dwindow.h95
-rw-r--r--src/datavis3d/engine/q3dwindow_p.h82
-rw-r--r--src/datavis3d/engine/shaders/fragmentShader30
-rw-r--r--src/datavis3d/engine/shaders/fragmentShaderAmbient31
-rw-r--r--src/datavis3d/engine/shaders/vertexShader25
-rw-r--r--src/datavis3d/global/global.pri5
-rw-r--r--src/datavis3d/global/qdatavis3dglobal.h88
-rw-r--r--src/datavis3d/global/qdatavis3namespace.h145
-rw-r--r--src/datavis3d/utils/camerahelper.cpp103
-rw-r--r--src/datavis3d/utils/camerahelper_p.h31
-rw-r--r--src/datavis3d/utils/meshloader.cpp107
-rw-r--r--src/datavis3d/utils/meshloader_p.h23
-rw-r--r--src/datavis3d/utils/utils.pri7
-rw-r--r--src/datavis3d/utils/vertexindexer.cpp137
-rw-r--r--src/datavis3d/utils/vertexindexer_p.h60
39 files changed, 11014 insertions, 0 deletions
diff --git a/src/datavis3d/Doxyfile b/src/datavis3d/Doxyfile
new file mode 100644
index 00000000..e5d78895
--- /dev/null
+++ b/src/datavis3d/Doxyfile
@@ -0,0 +1,1196 @@
+# Doxyfile 1.4.5
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = QtDataVis3D
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = internal-docs
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish,
+# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese,
+# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish,
+# Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 4
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for Java.
+# For instance, namespaces will be presented as packages, qualified scopes
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to
+# include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = yes
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = YES
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = YES
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = YES
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is YES.
+
+SHOW_DIRECTORIES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from the
+# version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+# Having it set to not, output a lot of status messages to stdout, we still
+# get the warning into the log file
+QUIET = YES
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = NO
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE = internal-docs/doxygen.log
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = . ../../tests/auto/xmlpatternsxqts/ ../../tests/auto/xmlpatternsview
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+
+FILE_PATTERNS = *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.dox *.gperf
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix filesystem feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+# The Qt API uses qdoc and Doxygen doesn't like its tags, so exclude the q* files.
+EXCLUDE_PATTERNS = *.moc *.moc.cpp moc_*.cpp ui_*.h
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = YES
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output. If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
+# is applied to all files.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT =
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET =
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader. This is useful
+# if you want to understand what is going on. On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF = YES
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED = Q_SLOTS="slots" \
+ Q_SIGNALS="signals"
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option is superseded by the HAVE_DOT option below. This is only a
+# fallback. It is recommended to install and use dot, since it yields more
+# powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = YES
+
+CALLER_GRAPH = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
+# generate a call dependency graph for every global function or class method.
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS = schema/doc/
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, which results in a white background.
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+
+DOT_TRANSPARENT = YES
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = YES
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
diff --git a/src/datavis3d/Mainpage.dox b/src/datavis3d/Mainpage.dox
new file mode 100644
index 00000000..973bc46f
--- /dev/null
+++ b/src/datavis3d/Mainpage.dox
@@ -0,0 +1,96 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtXmlPatterns module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+
+/**
+ * @mainpage QtXmlPatterns -- an implementation of XML technologies
+ *
+ * - @ref Patternist_info
+ * - @ref Patternist_writingDoxygen
+ *
+ * @section Patternist_info Overview
+ *
+ * This is the internal developer documentation for QtXmlPatterns. Please refer
+ * to Qt Assistant for usage documentation.
+ *
+ * The documentation that you are reading right now, can be generated by
+ * running <tt>doxygen</tt> in this directory without arguments. The generated
+ * documentation can subsequently be browsed from
+ * <tt>internal-docs/html/index.html</tt>.
+ *
+ * @subsection Patternist_writingDoxygen Doxygen Conventions
+ *
+ * Doxygen conventions, are as follows.
+ *
+ * - <tt>@@returns</tt> and <tt>@@param</tt> paragraphs are terminated with a period.
+ * - When XPath or XQuery expressions/queries appears in the Doxygen comments, wrap them
+ * in the @c tt HTML tag.
+ * - Classes and free standing functions should have an <tt>@@author</tt> tag, specifying who
+ * is the main author of it.
+ * - No code examples should appear directly in the Doxygen comments, they should be included with
+ * <tt>@@include</tt> or <tt>@@dontinclude</tt>.
+ * - The following terms are marked with <tt>@@c</tt> or the @c tt HTML tag:
+ * - @c NaN
+ * - @c true and @c false, when referred to as boolean values
+ * - All QNames and item types. For example, <tt>item\()</tt> and <tt>xs:string</tt>. Remember
+ * to use the @c tt HTML tag in these cases in order to include non-trivial characters
+ * such as paranteses
+ * - @c null
+ * - @c stderr, @c stdout, and @c stdin
+ *
+ *
+ * The current Doxygen comments does in some cases not adhere to this, but the
+ * idea is to harmonize in that direction over time.
+ *
+ * PatternistSDK, located in the test sources, is documented in the
+ * PatternistSDK Doxygen module.
+ *
+ * @author Frans Englich <frans.englich@nokia.com>
+ */
diff --git a/src/datavis3d/common.pri b/src/datavis3d/common.pri
new file mode 100644
index 00000000..8532fc77
--- /dev/null
+++ b/src/datavis3d/common.pri
@@ -0,0 +1,7 @@
+# This qmake file is included by all Patternist projects and contains common Qt defines,
+# compiler warnings, and include paths.
+
+INCLUDEPATH += $$PWD/engine \
+ $$PWD/global \
+ $$PWD/utils
+
diff --git a/src/datavis3d/datavis3d.pro b/src/datavis3d/datavis3d.pro
new file mode 100644
index 00000000..602e42d3
--- /dev/null
+++ b/src/datavis3d/datavis3d.pro
@@ -0,0 +1,24 @@
+TARGET = QtDataVis3D
+QT = core gui qml
+
+DEFINES += QTCOMMERCIALDATAVIS3D_LIBRARY
+#DEFINES += QT_NO_USING_NAMESPACE
+#win32-msvc*|win32-icc:QMAKE_LFLAGS += /BASE:0x61000000
+
+QMAKE_DOCS = $$PWD/doc/qtdatavis3d.qdocconf
+
+load(qt_module)
+
+include($$PWD/common.pri)
+include($$PWD/engine/engine.pri)
+include($$PWD/global/global.pri)
+include($$PWD/utils/utils.pri)
+
+wince* {
+ # The Microsoft MIPS compiler crashes if /Og is specified.
+ # -O2/1 expands to /Og plus additional arguments.
+ contains(DEFINES, MIPS) {
+ QMAKE_CXXFLAGS_RELEASE ~= s/-O2/-Oi -Ot -Oy -Ob2/
+ QMAKE_CXXFLAGS_RELEASE ~= s/-O1/-Os -Oy -Ob2/
+ }
+}
diff --git a/src/datavis3d/doc/qtdatavis3d.qdocconf b/src/datavis3d/doc/qtdatavis3d.qdocconf
new file mode 100644
index 00000000..c2c084b3
--- /dev/null
+++ b/src/datavis3d/doc/qtdatavis3d.qdocconf
@@ -0,0 +1,47 @@
+include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
+
+# Name of the project which must match the outputdir. Determines the .index file
+project = qtdatavis3d
+
+# Directories in which to search for files to document and images.
+# By default set to the root directory of the project for sources
+# and headers and qdoc will therefore generate output for each file.
+# Images should be placed in <rootdir>/dic/images and examples in
+# <rootdir>/examples.
+# Paths are relative to the location of this file.
+exampledirs += ../../../examples \
+ snippets
+
+headerdirs += ..
+imagedirs += images
+sourcedirs += ..
+
+depends += qtcore qtgui
+
+# The following parameters are for creating a qhp file, the qhelpgenerator
+# program can convert the qhp file into a qch file which can be opened in
+# Qt Assistant and/or Qt Creator.
+
+# Defines the name of the project. You cannot use operators (+, =, -) in
+# the name. Properties for this project are set using a qhp.<projectname>.property
+# format.
+qhp.projects = qtdatavis3d
+
+# Sets the name of the output qhp file.
+qhp.qtdatavis3d.file = qtdatavis3d.qhp
+
+# Namespace for the output file. This namespace is used to distinguish between
+# different documentation files in Creator/Assistant.
+qhp.qtdatavis3d.namespace = org.qt-project.qtdatavis3d.501
+
+# Title for the package, will be the main title for the package in
+# Assistant/Creator.
+qhp.qtdatavis3d.indexTitle = Qt Data Visualization 3D
+
+# Only update the name of the project for the next variables.
+qhp.qtdatavis3d.virtualFolder = qtdatavis3d
+qhp.qtdatavis3d.subprojects = classes
+qhp.qtdatavis3d.subprojects.classes.title = C++ Classes
+qhp.qtdatavis3d.subprojects.classes.indexTitle = Qt Data Visualization 3D C++ Classes
+qhp.qtdatavis3d.subprojects.classes.selectors = class fake:headerfile
+qhp.qtdatavis3d.subprojects.classes.sortPages = true
diff --git a/src/datavis3d/documentationGroups.dox b/src/datavis3d/documentationGroups.dox
new file mode 100644
index 00000000..ed9c3f1c
--- /dev/null
+++ b/src/datavis3d/documentationGroups.dox
@@ -0,0 +1,150 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtXmlPatterns module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+
+/**
+ * @file
+ * @short Contains Doxygen documentation for groups.
+ */
+
+namespace QPatternist
+{
+ /**
+ * @short The abstract syntax tree nodes that implements the builtin
+ * functions, such as @c fn:concat().
+ *
+ * @defgroup Patternist_functions Function Implementations
+ * @author Frans Englich <frans.englich@nokia.com>
+ */
+
+ /**
+ * @short The abstract syntax tree nodes that is generated for XPath,
+ * XQuery, and XSL-T code.
+ *
+ * XPath's approach of compilation is traditional. An Abstract Syntax
+ * Tree(AST) is built, where the Expression class is the abstract base
+ * class for all kinds of implementations of expressions.
+ *
+ * What perhaps can be said to be characteristic for Patternist is that the
+ * base class, Expression, performs a lot of work, and that sub-classes
+ * declares what specific behaviors they need, which the Expression's
+ * functions then bring into action.
+ *
+ * XPath expressions often have different amount of operands. For example,
+ * the 'and' expression takes two, the context item(".") none, and the
+ * if-expression three. To help expression implementations with that, there
+ * exist the abstract EmptyContainer, SingleContainer, PairContainer,
+ * TripleContainer, and UnlimitedContainer classes for avoiding duplicating
+ * code.
+ *
+ * @defgroup Patternist_expressions Expressions
+ * @author Frans Englich <frans.englich@nokia.com>
+ */
+
+ /**
+ * @short Various classes that contains small utility functions.
+ *
+ * @defgroup Patternist Utility Classes
+ * @author Frans Englich <frans.englich@nokia.com>
+ */
+
+ /**
+ * @short Classes for the type system in the XQuery & XSL-T language.
+ *
+ * @defgroup Patternist_types Type system
+ * @author Frans Englich <frans.englich@nokia.com>
+ */
+
+ /**
+ * @defgroup Patternist_xdm XQuery/XPath Data Model
+ * @author Frans Englich <frans.englich@nokia.com>
+ */
+
+ /**
+ * @short Patternist's family of iterators in one of the most central parts
+ * of Patternist's API, and are responsible for carrying, and typically
+ * also creating, data.
+ *
+ * An iterator, which always is an Iterator sub-class, is similar to a
+ * Java-style iterator. What signifies Patternist's iterators is that they
+ * almost always contains business logic(which is the cause to their
+ * efficiency).
+ *
+ * An example which illustrates this principle is the RangeIterator. When
+ * the RangeExpression is told to create a sequence of integers between 1
+ * and 1000, it doesn't enter a loop that allocates 1000 Integer instances,
+ * but instead return an RangeIterator that incrementally creates the
+ * numbers when asked to do so via its RangeIterator::next() function. If
+ * it turns out that the expression that has the range expression as
+ * operand only needs three items from it, that is what gets created, not
+ * 1000.
+ *
+ * All iterators operates by that principle, perhaps suitably labeled as
+ * "pull-based", "lazy loaded" or "serialized". Central for the XPath
+ * language is that it filters and selects data, and the iterators supports
+ * this well by letting the demand of the filter expressions(the callees)
+ * decide how "much" source that gets computed. In this way the evaluation
+ * of an expression tree can lead to a chain of pipelined iterators, where
+ * the first asks the second for data and then performs its specific
+ * operations, the second subsequently asks the third, and so forth.
+ *
+ * However, the iterators are not limited to be used for representing
+ * sequences of items in the XPath Data Model. The Iterator is
+ * parameterized on one argument, meaning any type of "units" can be
+ * iterated, be it Item or any other. One use of this is in the
+ * ExpressionSequence(which implements the comma operator) where it creates
+ * Iterator instances over Expression instances -- its operands. The
+ * parameterization is often used in combination with the MappingIterator
+ * and the MappingCallback.
+ *
+ * @defgroup Patternist_iterators Iterators
+ * @author Frans Englich <frans.englich@nokia.com>
+ */
+}
diff --git a/src/datavis3d/engine/engine.pri b/src/datavis3d/engine/engine.pri
new file mode 100644
index 00000000..f13478e7
--- /dev/null
+++ b/src/datavis3d/engine/engine.pri
@@ -0,0 +1,7 @@
+SOURCES += $$PWD/q3dwindow.cpp $$PWD/q3dbars.cpp
+
+HEADERS += $$PWD/q3dwindow_p.h $$PWD/q3dwindow.h \
+ $$PWD/q3dbars.h $$PWD/q3dbars_p.h
+
+RESOURCES += \
+ engine/engine.qrc
diff --git a/src/datavis3d/engine/engine.qrc b/src/datavis3d/engine/engine.qrc
new file mode 100644
index 00000000..e69eb670
--- /dev/null
+++ b/src/datavis3d/engine/engine.qrc
@@ -0,0 +1,21 @@
+<RCC>
+ <qresource prefix="/defaultMeshes">
+ <file alias="cone">meshes/coneFlat.obj</file>
+ <file alias="coneSmooth">meshes/coneSmooth.obj</file>
+ <file alias="pyramid">meshes/pyramidFlat.obj</file>
+ <file alias="pyramidSmooth">meshes/pyramidSmooth.obj</file>
+ <file alias="bar">meshes/cubeFlat.obj</file>
+ <file alias="barSmooth">meshes/cubeSmooth.obj</file>
+ <file alias="cylinder">meshes/cylinderFlat.obj</file>
+ <file alias="cylinderSmooth">meshes/cylinderSmooth.obj</file>
+ <file alias="ape">meshes/apeFlat.obj</file>
+ <file alias="apeSmooth">meshes/apeSmooth.obj</file>
+ <file alias="background">meshes/backgroudFlat.obj</file>
+ <file alias="backgroundSmooth">meshes/backgroudSmooth.obj</file>
+ </qresource>
+ <qresource prefix="/shaders">
+ <file alias="fragment">shaders/fragmentShader</file>
+ <file alias="vertex">shaders/vertexShader</file>
+ <file alias="fragmentAmbient">shaders/fragmentShaderAmbient</file>
+ </qresource>
+</RCC>
diff --git a/src/datavis3d/engine/meshes/apeFlat.obj b/src/datavis3d/engine/meshes/apeFlat.obj
new file mode 100644
index 00000000..1e6d5fbf
--- /dev/null
+++ b/src/datavis3d/engine/meshes/apeFlat.obj
@@ -0,0 +1,3488 @@
+# Blender v2.66 (sub 0) OBJ File: 'cylinder.blend'
+# www.blender.org
+o Suzanne
+v -2.122357 0.164062 -1.198706
+v -2.997357 0.164062 -1.198706
+v -2.059857 0.093750 -1.276831
+v -3.059857 0.093750 -1.276831
+v -2.012982 0.054687 -1.386206
+v -3.106732 0.054687 -1.386206
+v -2.208294 -0.023438 -1.347144
+v -2.911419 -0.023438 -1.347144
+v -2.208294 0.031250 -1.245581
+v -2.911419 0.031250 -1.245581
+v -2.208294 0.132812 -1.183081
+v -2.911419 0.132812 -1.183081
+v -2.286419 0.164062 -1.167456
+v -2.833294 0.164062 -1.167456
+v -2.356732 0.093750 -1.222144
+v -2.762982 0.093750 -1.222144
+v -2.403607 0.054687 -1.315894
+v -2.716107 0.054687 -1.315894
+v -2.481732 0.242187 -1.308081
+v -2.637982 0.242187 -1.308081
+v -2.419232 0.242187 -1.222144
+v -2.700482 0.242187 -1.222144
+v -2.317669 0.242187 -1.167456
+v -2.802044 0.242187 -1.167456
+v -2.286419 0.328125 -1.167456
+v -2.833294 0.328125 -1.167456
+v -2.356732 0.390625 -1.222144
+v -2.762982 0.390625 -1.222144
+v -2.403607 0.437500 -1.315894
+v -2.716107 0.437500 -1.315894
+v -2.208294 0.515625 -1.347144
+v -2.911419 0.515625 -1.347144
+v -2.208294 0.453125 -1.245581
+v -2.911419 0.453125 -1.245581
+v -2.208294 0.359375 -1.183081
+v -2.911419 0.359375 -1.183081
+v -2.122357 0.328125 -1.198706
+v -2.997357 0.328125 -1.198706
+v -2.059857 0.390625 -1.276831
+v -3.059857 0.390625 -1.276831
+v -2.012982 0.437500 -1.386206
+v -3.106732 0.437500 -1.386206
+v -1.934857 0.242187 -1.401831
+v -3.184857 0.242187 -1.401831
+v -1.997357 0.242187 -1.292456
+v -3.122357 0.242187 -1.292456
+v -2.091107 0.242187 -1.206519
+v -3.028607 0.242187 -1.206519
+v -2.083294 0.242187 -1.190894
+v -3.036419 0.242187 -1.190894
+v -2.114544 0.335937 -1.183081
+v -3.005169 0.335937 -1.183081
+v -2.208294 0.375000 -1.159644
+v -2.911419 0.375000 -1.159644
+v -2.294232 0.335937 -1.144019
+v -2.825482 0.335937 -1.144019
+v -2.333294 0.242187 -1.144019
+v -2.786419 0.242187 -1.144019
+v -2.294232 0.156250 -1.144019
+v -2.825482 0.156250 -1.144019
+v -2.208294 0.242187 -1.136206
+v -2.911419 0.242187 -1.136206
+v -2.208294 0.117187 -1.159644
+v -2.911419 0.117187 -1.159644
+v -2.114544 0.156250 -1.183081
+v -3.005169 0.156250 -1.183081
+v -2.559857 0.429687 -1.222144
+v -2.559857 0.351562 -1.144019
+v -2.559857 -0.679688 -1.229956
+v -2.559857 -0.320313 -1.183081
+v -2.559857 -0.187500 -1.167456
+v -2.559857 -0.773438 -1.245581
+v -2.559857 0.406250 -1.362769
+v -2.559857 0.570312 -1.394019
+v -2.559857 0.898438 -2.511206
+v -2.559857 0.562500 -2.815894
+v -2.559857 0.070313 -2.792456
+v -2.559857 -0.382812 -2.315894
+v -2.356732 -0.187500 -1.401831
+v -2.762982 -0.187500 -1.401831
+v -2.247357 -0.437500 -1.394019
+v -2.872357 -0.437500 -1.394019
+v -2.208294 -0.695312 -1.394019
+v -2.911419 -0.695312 -1.394019
+v -2.192669 -0.890625 -1.433081
+v -2.927044 -0.890625 -1.433081
+v -2.231732 -0.945312 -1.440894
+v -2.887982 -0.945312 -1.440894
+v -2.380169 -0.968750 -1.409644
+v -2.739544 -0.968750 -1.409644
+v -2.559857 -0.984375 -1.386206
+v -2.122357 -0.140625 -1.433081
+v -2.997357 -0.140625 -1.433081
+v -1.927044 -0.039063 -1.425269
+v -3.192669 -0.039063 -1.425269
+v -1.731732 0.148437 -1.519019
+v -3.387982 0.148437 -1.519019
+v -1.700482 0.429687 -1.370581
+v -3.419232 0.429687 -1.370581
+v -1.848919 0.484375 -1.339331
+v -3.270794 0.484375 -1.339331
+v -2.067669 0.601562 -1.276831
+v -3.052044 0.601562 -1.276831
+v -2.239544 0.757812 -1.229956
+v -2.880169 0.757812 -1.229956
+v -2.403607 0.718750 -1.206519
+v -2.716107 0.718750 -1.206519
+v -2.497357 0.492187 -1.214331
+v -2.622357 0.492187 -1.214331
+v -2.395794 0.414062 -1.190894
+v -2.723919 0.414062 -1.190894
+v -2.434857 0.304687 -1.198706
+v -2.684857 0.304687 -1.198706
+v -2.356732 0.093750 -1.222144
+v -2.762982 0.093750 -1.222144
+v -2.184857 0.015625 -1.261206
+v -2.934857 0.015625 -1.261206
+v -2.067669 0.062500 -1.292456
+v -3.052044 0.062500 -1.292456
+v -1.934857 0.187500 -1.315894
+v -3.184857 0.187500 -1.315894
+v -1.919232 0.296875 -1.315894
+v -3.200482 0.296875 -1.315894
+v -1.958294 0.375000 -1.300269
+v -3.161419 0.375000 -1.300269
+v -2.130169 0.437500 -1.245581
+v -2.989544 0.437500 -1.245581
+v -2.309857 0.468750 -1.206519
+v -2.809857 0.468750 -1.206519
+v -2.559857 -0.765625 -1.229956
+v -2.450482 -0.718750 -1.229956
+v -2.669232 -0.718750 -1.229956
+v -2.442669 -0.835938 -1.253394
+v -2.677044 -0.835938 -1.253394
+v -2.497357 -0.882813 -1.269019
+v -2.622357 -0.882813 -1.269019
+v -2.559857 -0.890625 -1.276831
+v -2.559857 -0.195313 -1.214331
+v -2.559857 -0.140625 -1.222144
+v -2.458294 -0.148438 -1.222144
+v -2.661419 -0.148438 -1.222144
+v -2.434857 -0.226563 -1.214331
+v -2.684857 -0.226563 -1.214331
+v -2.473919 -0.289063 -1.222144
+v -2.645794 -0.289063 -1.222144
+v -2.161419 -0.046875 -1.292456
+v -2.958294 -0.046875 -1.292456
+v -1.942669 0.054687 -1.339331
+v -3.177044 0.054687 -1.339331
+v -1.833294 0.203125 -1.362769
+v -3.286419 0.203125 -1.362769
+v -1.817669 0.375000 -1.308081
+v -3.302044 0.375000 -1.308081
+v -1.872357 0.414062 -1.237769
+v -3.247357 0.414062 -1.237769
+v -2.122357 0.546875 -1.167456
+v -2.997357 0.546875 -1.167456
+v -2.247357 0.640625 -1.128394
+v -2.872357 0.640625 -1.128394
+v -2.356732 0.617187 -1.112769
+v -2.762982 0.617187 -1.112769
+v -2.458294 0.429687 -1.120581
+v -2.661419 0.429687 -1.120581
+v -2.434857 -0.101563 -1.151831
+v -2.684857 -0.101563 -1.151831
+v -2.348919 -0.445313 -1.253394
+v -2.770794 -0.445313 -1.253394
+v -2.309857 -0.703125 -1.276831
+v -2.809857 -0.703125 -1.276831
+v -2.294232 -0.820312 -1.300269
+v -2.825482 -0.820312 -1.300269
+v -2.325482 -0.914062 -1.331519
+v -2.794232 -0.914062 -1.331519
+v -2.395794 -0.929688 -1.331519
+v -2.723919 -0.929688 -1.331519
+v -2.559857 -0.945312 -1.323706
+v -2.559857 0.046875 -1.237769
+v -2.559857 0.210937 -1.198706
+v -2.231732 0.476562 -1.222144
+v -2.887982 0.476562 -1.222144
+v -2.395794 0.140625 -1.214331
+v -2.723919 0.140625 -1.214331
+v -2.427044 0.210937 -1.206519
+v -2.692669 0.210937 -1.206519
+v -2.442669 -0.687500 -1.229956
+v -2.677044 -0.687500 -1.229956
+v -2.481732 -0.445313 -1.214331
+v -2.637982 -0.445313 -1.214331
+v -2.559857 -0.445313 -1.214331
+v -2.559857 -0.328125 -1.222144
+v -2.466107 -0.273438 -1.183081
+v -2.653607 -0.273438 -1.183081
+v -2.427044 -0.226563 -1.167456
+v -2.692669 -0.226563 -1.167456
+v -2.450482 -0.132813 -1.183081
+v -2.669232 -0.132813 -1.183081
+v -2.520794 -0.125000 -1.183081
+v -2.598919 -0.125000 -1.183081
+v -2.559857 -0.203125 -1.136206
+v -2.512982 -0.148438 -1.151831
+v -2.606732 -0.148438 -1.151831
+v -2.466107 -0.156250 -1.151831
+v -2.653607 -0.156250 -1.151831
+v -2.450482 -0.226563 -1.136206
+v -2.669232 -0.226563 -1.136206
+v -2.481732 -0.250000 -1.159644
+v -2.637982 -0.250000 -1.159644
+v -2.559857 -0.289063 -1.159644
+v -2.302044 -0.312500 -1.409644
+v -2.817669 -0.312500 -1.409644
+v -2.395794 -0.242188 -1.253394
+v -2.723919 -0.242188 -1.253394
+v -2.380169 -0.312500 -1.253394
+v -2.739544 -0.312500 -1.253394
+v -2.325482 -0.250000 -1.409644
+v -2.794232 -0.250000 -1.409644
+v -2.559857 -0.875000 -1.276831
+v -2.512982 -0.867188 -1.276831
+v -2.606732 -0.867188 -1.276831
+v -2.466107 -0.820313 -1.253394
+v -2.653607 -0.820313 -1.253394
+v -2.466107 -0.742188 -1.237769
+v -2.653607 -0.742188 -1.237769
+v -2.559857 -0.781250 -1.308081
+v -2.466107 -0.750000 -1.300269
+v -2.653607 -0.750000 -1.300269
+v -2.466107 -0.812500 -1.323706
+v -2.653607 -0.812500 -1.323706
+v -2.512982 -0.851562 -1.331519
+v -2.606732 -0.851562 -1.331519
+v -2.559857 -0.859375 -1.331519
+v -2.387982 0.218750 -1.183081
+v -2.731732 0.218750 -1.183081
+v -2.372357 0.156250 -1.190894
+v -2.747357 0.156250 -1.190894
+v -2.223919 0.429687 -1.206519
+v -2.895794 0.429687 -1.206519
+v -2.286419 0.421875 -1.190894
+v -2.833294 0.421875 -1.190894
+v -2.137982 0.398437 -1.190894
+v -2.981732 0.398437 -1.190894
+v -1.997357 0.351562 -1.269019
+v -3.122357 0.351562 -1.269019
+v -1.973919 0.289062 -1.276831
+v -3.145794 0.289062 -1.276831
+v -1.981732 0.195312 -1.284644
+v -3.137982 0.195312 -1.284644
+v -2.083294 0.101562 -1.245581
+v -3.036419 0.101562 -1.245581
+v -2.184857 0.062500 -1.222144
+v -2.934857 0.062500 -1.222144
+v -2.333294 0.109375 -1.183081
+v -2.786419 0.109375 -1.183081
+v -2.380169 0.296875 -1.183081
+v -2.739544 0.296875 -1.183081
+v -2.348919 0.375000 -1.183081
+v -2.770794 0.375000 -1.183081
+v -2.325482 0.359375 -1.206519
+v -2.794232 0.359375 -1.206519
+v -2.364544 0.296875 -1.206519
+v -2.755169 0.296875 -1.206519
+v -2.317669 0.125000 -1.206519
+v -2.802044 0.125000 -1.206519
+v -2.184857 0.085937 -1.237769
+v -2.934857 0.085937 -1.237769
+v -2.098919 0.117187 -1.261206
+v -3.020794 0.117187 -1.261206
+v -2.012982 0.210937 -1.292456
+v -3.106732 0.210937 -1.292456
+v -2.005169 0.281250 -1.292456
+v -3.114544 0.281250 -1.292456
+v -2.028607 0.335937 -1.284644
+v -3.091107 0.335937 -1.284644
+v -2.145794 0.390625 -1.214331
+v -2.973919 0.390625 -1.214331
+v -2.278607 0.398437 -1.198706
+v -2.841107 0.398437 -1.198706
+v -2.223919 0.406250 -1.214331
+v -2.895794 0.406250 -1.214331
+v -2.356732 0.171875 -1.214331
+v -2.762982 0.171875 -1.214331
+v -2.364544 0.226562 -1.214331
+v -2.755169 0.226562 -1.214331
+v -2.450482 0.460937 -1.354956
+v -2.669232 0.460937 -1.354956
+v -2.364544 0.664062 -1.347144
+v -2.755169 0.664062 -1.347144
+v -2.223919 0.687500 -1.370581
+v -2.895794 0.687500 -1.370581
+v -2.075482 0.554688 -1.409644
+v -3.044232 0.554688 -1.409644
+v -1.880169 0.453125 -1.472144
+v -3.239544 0.453125 -1.472144
+v -1.762982 0.406250 -1.503394
+v -3.356732 0.406250 -1.503394
+v -1.786419 0.164062 -1.589331
+v -3.333294 0.164062 -1.589331
+v -1.958294 -0.000000 -1.550269
+v -3.161419 -0.000000 -1.550269
+v -2.122357 -0.093750 -1.495581
+v -2.997357 -0.093750 -1.495581
+v -2.559857 0.898438 -1.675269
+v -2.559857 0.984375 -2.042456
+v -2.559857 -0.195312 -2.636206
+v -2.559857 -0.460938 -1.776831
+v -2.559857 -0.976562 -1.503394
+v -2.559857 -0.804688 -1.620581
+v -2.559857 -0.570312 -1.644019
+v -2.559857 -0.484375 -1.683081
+v -1.708294 0.234375 -1.909644
+v -3.411419 0.234375 -1.909644
+v -1.700482 0.320312 -2.011206
+v -3.419232 0.320312 -2.011206
+v -1.786419 0.265625 -2.401831
+v -3.333294 0.265625 -2.401831
+v -2.098919 0.437500 -2.667456
+v -3.020794 0.437500 -2.667456
+v -1.825482 -0.046875 -1.894019
+v -3.294232 -0.046875 -1.894019
+v -1.966107 -0.125000 -2.128394
+v -3.153607 -0.125000 -2.128394
+v -1.919232 -0.007812 -2.394019
+v -3.200482 -0.007812 -2.394019
+v -2.223919 0.054688 -2.628394
+v -2.895794 0.054688 -2.628394
+v -2.325482 -0.351563 -1.558081
+v -2.794232 -0.351563 -1.558081
+v -2.380169 -0.414062 -1.706519
+v -2.739544 -0.414062 -1.706519
+v -2.270794 -0.710938 -1.581519
+v -2.848919 -0.710938 -1.581519
+v -2.309857 -0.500000 -1.573706
+v -2.809857 -0.500000 -1.573706
+v -2.231732 -0.914062 -1.565894
+v -2.887982 -0.914062 -1.565894
+v -2.419232 -0.757812 -1.597144
+v -2.700482 -0.757812 -1.597144
+v -2.434857 -0.539062 -1.604956
+v -2.684857 -0.539062 -1.604956
+v -2.395794 -0.945312 -1.526831
+v -2.723919 -0.945312 -1.526831
+v -2.341107 -0.281250 -1.534644
+v -2.778607 -0.281250 -1.534644
+v -2.348919 -0.226563 -1.495581
+v -2.770794 -0.226563 -1.495581
+v -2.356732 -0.171875 -1.464331
+v -2.762982 -0.171875 -1.464331
+v -2.348919 -0.390625 -1.800269
+v -2.770794 -0.390625 -1.800269
+v -2.262982 -0.312500 -2.229956
+v -2.856732 -0.312500 -2.229956
+v -2.216107 -0.148437 -2.503394
+v -2.903607 -0.148437 -2.503394
+v -2.106732 0.867188 -2.347144
+v -3.012982 0.867188 -2.347144
+v -2.106732 0.929688 -2.034644
+v -3.012982 0.929688 -2.034644
+v -2.106732 0.851562 -1.729956
+v -3.012982 0.851562 -1.729956
+v -2.098919 0.523438 -1.534644
+v -3.020794 0.523438 -1.534644
+v -1.833294 0.406250 -1.628394
+v -3.286419 0.406250 -1.628394
+v -1.927044 0.453125 -1.683081
+v -3.192669 0.453125 -1.683081
+v -1.919232 0.703125 -1.909644
+v -3.200482 0.703125 -1.909644
+v -1.762982 0.562500 -1.839331
+v -3.356732 0.562500 -1.839331
+v -1.762982 0.617188 -2.081519
+v -3.356732 0.617188 -2.081519
+v -1.919232 0.750000 -2.159644
+v -3.200482 0.750000 -2.159644
+v -1.919232 0.679688 -2.409644
+v -3.200482 0.679688 -2.409644
+v -1.762982 0.539062 -2.323706
+v -3.356732 0.539062 -2.323706
+v -1.942669 0.328125 -2.550269
+v -3.177044 0.328125 -2.550269
+v -2.075482 0.023438 -2.511206
+v -3.044232 0.023438 -2.511206
+v -1.739544 0.328125 -2.167456
+v -3.380169 0.328125 -2.167456
+v -2.153607 -0.171875 -1.815894
+v -2.966107 -0.171875 -1.815894
+v -2.130169 -0.195312 -2.175269
+v -2.989544 -0.195312 -2.175269
+v -1.669232 0.406250 -2.198706
+v -3.450482 0.406250 -2.198706
+v -1.786419 -0.140625 -2.089331
+v -3.333294 -0.140625 -2.089331
+v -1.520794 -0.101562 -2.292456
+v -3.598919 -0.101562 -2.292456
+v -1.278607 0.054688 -2.394019
+v -3.841107 0.054688 -2.394019
+v -1.208294 0.320313 -2.386206
+v -3.911419 0.320313 -2.386206
+v -1.325482 0.507812 -2.386206
+v -3.794232 0.507812 -2.386206
+v -1.536419 0.476562 -2.276831
+v -3.583294 0.476562 -2.276831
+v -1.544232 0.414062 -2.253394
+v -3.575482 0.414062 -2.253394
+v -1.372357 0.437500 -2.354956
+v -3.747357 0.437500 -2.354956
+v -1.294232 0.289063 -2.370581
+v -3.825482 0.289063 -2.370581
+v -1.348919 0.078125 -2.370581
+v -3.770794 0.078125 -2.370581
+v -1.528607 -0.039062 -2.269019
+v -3.591107 -0.039062 -2.269019
+v -1.731732 -0.070312 -2.097144
+v -3.387982 -0.070312 -2.097144
+v -1.637982 0.359375 -2.183081
+v -3.481732 0.359375 -2.183081
+v -1.614544 0.304688 -2.253394
+v -3.505169 0.304688 -2.253394
+v -1.677044 -0.023437 -2.175269
+v -3.442669 -0.023437 -2.175269
+v -1.520794 0.000000 -2.331519
+v -3.598919 0.000000 -2.331519
+v -1.372357 0.093750 -2.409644
+v -3.747357 0.093750 -2.409644
+v -1.325482 0.250000 -2.409644
+v -3.794232 0.250000 -2.409644
+v -1.387982 0.359375 -2.401831
+v -3.731732 0.359375 -2.401831
+v -1.536419 0.343750 -2.323706
+v -3.583294 0.343750 -2.323706
+v -1.716107 0.289062 -2.175269
+v -3.403607 0.289062 -2.175269
+v -1.723919 0.171875 -2.237769
+v -3.395794 0.171875 -2.237769
+v -1.802044 0.093750 -2.237769
+v -3.317669 0.093750 -2.237769
+v -1.739544 0.085938 -2.237769
+v -3.380169 0.085938 -2.237769
+v -1.716107 0.015625 -2.237769
+v -3.403607 0.015625 -2.237769
+v -1.747357 -0.015625 -2.237769
+v -3.372357 -0.015625 -2.237769
+v -1.833294 -0.000000 -2.034644
+v -3.286419 -0.000000 -2.034644
+v -1.841107 -0.023438 -2.136206
+v -3.278607 -0.023438 -2.136206
+v -1.841107 0.039062 -2.151831
+v -3.278607 0.039062 -2.151831
+v -1.762982 0.203125 -2.175269
+v -3.356732 0.203125 -2.175269
+v -1.669232 0.242188 -2.229956
+v -3.450482 0.242188 -2.229956
+v -1.669232 0.234375 -2.284644
+v -3.450482 0.234375 -2.284644
+v -1.747357 -0.015625 -2.284644
+v -3.372357 -0.015625 -2.284644
+v -1.708294 0.015625 -2.284644
+v -3.411419 0.015625 -2.284644
+v -1.731732 0.078125 -2.284644
+v -3.387982 0.078125 -2.284644
+v -1.794232 0.093750 -2.284644
+v -3.325482 0.093750 -2.284644
+v -1.716107 0.171875 -2.284644
+v -3.403607 0.171875 -2.284644
+v -1.520794 0.328125 -2.378394
+v -3.598919 0.328125 -2.378394
+v -1.372357 0.343750 -2.448706
+v -3.747357 0.343750 -2.448706
+v -1.302044 0.242188 -2.456519
+v -3.817669 0.242188 -2.456519
+v -1.348919 0.085938 -2.448706
+v -3.770794 0.085938 -2.448706
+v -1.512982 0.000000 -2.386206
+v -3.606732 0.000000 -2.386206
+v -1.677044 -0.015625 -2.229956
+v -3.442669 -0.015625 -2.229956
+v -1.606732 0.289063 -2.308081
+v -3.512982 0.289063 -2.308081
+v -1.669232 0.109375 -2.292456
+v -3.450482 0.109375 -2.292456
+v -1.622357 0.062500 -2.300269
+v -3.497357 0.062500 -2.300269
+v -1.559857 0.125000 -2.331519
+v -3.559857 0.125000 -2.331519
+v -1.598919 0.171875 -2.315894
+v -3.520794 0.171875 -2.315894
+v -1.544232 0.234375 -2.339331
+v -3.575482 0.234375 -2.339331
+v -1.505169 0.187500 -2.347144
+v -3.614544 0.187500 -2.347144
+v -1.450482 0.210938 -2.354956
+v -3.669232 0.210938 -2.354956
+v -1.473919 0.273438 -2.354956
+v -3.645794 0.273438 -2.354956
+v -1.536419 0.437500 -2.448706
+v -3.583294 0.437500 -2.448706
+v -1.309857 0.468750 -2.511206
+v -3.809857 0.468750 -2.511206
+v -1.192669 0.296875 -2.464331
+v -3.927044 0.296875 -2.464331
+v -1.247357 0.054688 -2.495581
+v -3.872357 0.054688 -2.495581
+v -1.520794 -0.085937 -2.456519
+v -3.598919 -0.085937 -2.456519
+v -1.770794 -0.125000 -2.292456
+v -3.348919 -0.125000 -2.292456
+v -1.700482 0.382813 -2.347144
+v -3.419232 0.382813 -2.347144
+vt 0.472248 0.856582
+vt 0.458792 0.842677
+vt 0.473546 0.821180
+vt 0.715056 0.859528
+vt 0.689237 0.869892
+vt 0.698417 0.831391
+vt 0.499792 0.847299
+vt 0.491595 0.807822
+vt 0.742167 0.847902
+vt 0.720353 0.812741
+vt 0.890362 0.004822
+vt 0.890736 0.040402
+vt 0.867965 0.046959
+vt 0.742113 0.898476
+vt 0.715154 0.898340
+vt 0.438114 0.844174
+vt 0.436615 0.821937
+vt 0.689074 0.891767
+vt 0.938581 0.894186
+vt 0.941563 0.874834
+vt 0.959029 0.911658
+vt 0.699270 0.924815
+vt 0.680318 0.906024
+vt 0.965641 0.874676
+vt 0.983123 0.923752
+vt 0.721709 0.933724
+vt 0.960219 0.841459
+vt 0.983641 0.833564
+vt 0.148158 0.878633
+vt 0.127860 0.868828
+vt 0.148191 0.834010
+vt 0.938529 0.857649
+vt 0.102328 0.859165
+vt 0.127211 0.833008
+vt 0.956527 0.713480
+vt 0.955862 0.693038
+vt 0.973764 0.727209
+vt 0.102988 0.897722
+vt 0.088936 0.876166
+vt 0.972236 0.690651
+vt 0.996505 0.686870
+vt 0.116957 0.917456
+vt 0.971586 0.656836
+vt 0.995712 0.643127
+vt 0.073449 0.925971
+vt 0.069639 0.904851
+vt 0.438230 0.893993
+vt 0.457433 0.893241
+vt 0.472588 0.913302
+vt 0.071806 0.879803
+vt 0.472782 0.878208
+vt 0.265788 0.881660
+vt 0.287626 0.881086
+vt 0.291869 0.900041
+vt 0.498860 0.885474
+vt 0.489553 0.926445
+vt 0.237588 0.881292
+vt 0.273786 0.916009
+vt 0.524237 0.890727
+vt 0.239693 0.833859
+vt 0.266449 0.845077
+vt 0.288399 0.860675
+vt 0.534113 0.808440
+vt 0.530149 0.826352
+vt 0.530146 0.807822
+vt 0.290806 0.881557
+vt 0.534061 0.847446
+vt 0.525661 0.826794
+vt 0.946839 0.040241
+vt 0.953472 0.039583
+vt 0.961912 0.055521
+vt 0.956270 0.675474
+vt 0.950832 0.693246
+vt 0.946647 0.017594
+vt 0.952506 0.019351
+vt 0.951779 0.716275
+vt 0.956929 0.000301
+vt 0.962015 0.004473
+vt 0.032345 0.946842
+vt 0.024574 0.965181
+vt 0.027536 0.943341
+vt 0.378433 0.824768
+vt 0.384350 0.824187
+vt 0.387633 0.842266
+vt 0.032349 0.983432
+vt 0.019641 0.964242
+vt 0.381490 0.803449
+vt 0.387663 0.805471
+vt 0.742643 0.049436
+vt 0.743962 0.029783
+vt 0.748037 0.030453
+vt 0.069639 0.946125
+vt 0.073731 0.946331
+vt 0.075824 0.965880
+vt 0.743660 0.011175
+vt 0.747701 0.010514
+vt 0.077682 0.925971
+vt 0.080690 0.927631
+vt 0.775496 0.026838
+vt 0.805910 0.017225
+vt 0.805641 0.038264
+vt 0.493293 0.929631
+vt 0.502008 0.945564
+vt 0.478348 0.957605
+vt 0.788140 0.001511
+vt 0.499347 0.970089
+vt 0.766000 0.003772
+vt 0.805910 0.000898
+vt 0.823656 0.001758
+vt 0.813047 0.028292
+vt 0.750761 0.020109
+vt 0.837894 0.017084
+vt 0.750740 0.042712
+vt 0.837776 0.041125
+vt 0.766246 0.057381
+vt 0.826170 0.057381
+vt 0.790650 0.056164
+vt 0.807823 0.057218
+vt 0.478345 0.926445
+vt 0.938271 0.178496
+vt 0.918243 0.181644
+vt 0.928479 0.144683
+vt 0.911776 0.149401
+vt 0.902831 0.113992
+vt 0.921392 0.104401
+vt 0.946623 0.204662
+vt 0.919010 0.195385
+vt 0.896994 0.098739
+vt 0.915800 0.069357
+vt 0.431337 0.615757
+vt 0.397947 0.634151
+vt 0.391824 0.614837
+vt 0.875134 0.091062
+vt 0.430439 0.660648
+vt 0.396124 0.661402
+vt 0.852968 0.091090
+vt 0.903798 0.059482
+vt 0.431266 0.721972
+vt 0.394315 0.722210
+vt 0.129918 0.738382
+vt 0.088692 0.771744
+vt 0.121440 0.705813
+vt 0.154888 0.339589
+vt 0.197075 0.318718
+vt 0.217322 0.340687
+vt 0.701123 0.747144
+vt 0.742167 0.746844
+vt 0.667066 0.812741
+vt 0.651642 0.052981
+vt 0.615897 0.042727
+vt 0.651224 0.012552
+vt 0.708358 0.689438
+vt 0.737567 0.695146
+vt 0.573967 0.371705
+vt 0.606119 0.312735
+vt 0.622396 0.348454
+vt 0.699845 0.649351
+vt 0.742146 0.631360
+vt 0.665959 0.310051
+vt 0.668569 0.627550
+vt 0.679719 0.595793
+vt 0.687106 0.341061
+vt 0.659749 0.343426
+vt 0.163514 0.670902
+vt 0.160819 0.643211
+vt 0.194703 0.640878
+vt 0.726352 0.386908
+vt 0.670923 0.360638
+vt 0.098471 0.676019
+vt 0.103684 0.647841
+vt 0.771852 0.419662
+vt 0.744019 0.438281
+vt 0.061044 0.677572
+vt 0.047926 0.646539
+vt 0.772716 0.457352
+vt 0.745189 0.463285
+vt 0.159594 0.913124
+vt 0.191706 0.920948
+vt 0.148191 0.932951
+vt 0.879002 0.294475
+vt 0.882249 0.239029
+vt 0.907121 0.234451
+vt 0.148282 0.863908
+vt 0.173483 0.865830
+vt 0.880912 0.218137
+vt 0.901679 0.204662
+vt 0.154703 0.833859
+vt 0.174605 0.844985
+vt 0.702531 0.471862
+vt 0.709933 0.450131
+vt 0.708846 0.491756
+vt 0.573967 0.714829
+vt 0.613023 0.720229
+vt 0.612563 0.744539
+vt 0.707133 0.432184
+vt 0.579454 0.689291
+vt 0.618924 0.702918
+vt 0.769433 0.651276
+vt 0.744253 0.633751
+vt 0.772530 0.626187
+vt 0.604843 0.673512
+vt 0.766789 0.693765
+vt 0.742167 0.701355
+vt 0.647299 0.635832
+vt 0.633320 0.686008
+vt 0.772211 0.712915
+vt 0.753167 0.719655
+vt 0.660171 0.656651
+vt 0.624371 0.375059
+vt 0.648339 0.366758
+vt 0.674838 0.657263
+vt 0.603714 0.410464
+vt 0.594948 0.380219
+vt 0.692117 0.715273
+vt 0.599778 0.439924
+vt 0.584575 0.434571
+vt 0.627592 0.475462
+vt 0.586788 0.508429
+vt 0.633819 0.595793
+vt 0.602237 0.559009
+vt 0.646125 0.591663
+vt 0.640568 0.482049
+vt 0.629705 0.516986
+vt 0.660845 0.548435
+vt 0.652697 0.557654
+vt 0.680135 0.484017
+vt 0.603147 0.786500
+vt 0.593823 0.757125
+vt 0.697683 0.513314
+vt 0.666489 0.513712
+vt 0.631306 0.801492
+vt 0.639322 0.773998
+vt 0.658404 0.485955
+vt 0.674819 0.539696
+vt 0.895502 0.165044
+vt 0.895130 0.151710
+vt 0.887874 0.175703
+vt 0.889631 0.139272
+vt 0.361427 0.663879
+vt 0.361644 0.637024
+vt 0.876866 0.127380
+vt 0.854334 0.125796
+vt 0.362638 0.728061
+vt 0.364104 0.670678
+vt 0.315959 0.682523
+vt 0.330541 0.735957
+vt 0.293413 0.686670
+vt 0.848897 0.122673
+vt 0.370486 0.763808
+vt 0.351492 0.759158
+vt 0.346589 0.732009
+vt 0.340300 0.678399
+vt 0.337349 0.658616
+vt 0.316491 0.674934
+vt 0.019634 0.955126
+vt 0.008606 0.957181
+vt 0.011011 0.942600
+vt 0.255100 0.948480
+vt 0.244377 0.938237
+vt 0.264634 0.948025
+vt 0.675482 0.957613
+vt 0.665386 0.957806
+vt 0.680291 0.943826
+vt 0.420687 0.968763
+vt 0.422704 0.947518
+vt 0.431337 0.947862
+vt 0.680318 0.979555
+vt 0.668496 0.973272
+vt 0.047980 0.964965
+vt 0.047672 0.950519
+vt 0.057821 0.943341
+vt 0.289217 0.667253
+vt 0.278417 0.668079
+vt 0.278771 0.650319
+vt 0.293211 0.937623
+vt 0.276531 0.933400
+vt 0.288573 0.925712
+vt 0.019641 0.917120
+vt 0.019554 0.938089
+vt 0.010922 0.919021
+vt 0.272210 0.968875
+vt 0.264021 0.971526
+vt 0.258502 0.987983
+vt 0.255017 0.971249
+vt 0.247582 0.952045
+vt 0.271488 0.672468
+vt 0.287486 0.943513
+vt 0.272221 0.937426
+vt 0.740574 0.959038
+vt 0.733567 0.958551
+vt 0.734053 0.948316
+vt 0.414738 0.950739
+vt 0.412181 0.942567
+vt 0.742167 0.943970
+vt 0.721452 0.933724
+vt 0.412220 0.966535
+vt 0.001844 0.953709
+vt 0.006911 0.944193
+vt 0.239214 0.945734
+vt 0.718166 0.965649
+vt 0.718150 0.941388
+vt 0.287996 0.953414
+vt 0.272210 0.960699
+vt 0.237588 0.967130
+vt 0.243183 0.991820
+vt 0.771679 0.917662
+vt 0.762698 0.937917
+vt 0.742337 0.933996
+vt 0.591212 0.548486
+vt 0.586717 0.527571
+vt 0.766263 0.953153
+vt 0.574196 0.561988
+vt 0.574728 0.557786
+vt 0.379778 0.776050
+vt 0.391660 0.771339
+vt 0.272131 0.927361
+vt 0.252901 0.936043
+vt 0.392455 0.754363
+vt 0.307653 0.743529
+vt 0.335180 0.772494
+vt 0.426082 0.753855
+vt 0.064602 0.788054
+vt 0.049360 0.750419
+vt 0.076785 0.734917
+vt 0.423413 0.769427
+vt 0.051938 0.796579
+vt 0.037171 0.759127
+vt 0.418261 0.785222
+vt 0.377038 0.803449
+vt 0.040711 0.833008
+vt 0.864608 0.170898
+vt 0.867076 0.150616
+vt 0.868972 0.167985
+vt 0.870935 0.149342
+vt 0.884239 0.170114
+vt 0.945479 0.050623
+vt 0.946610 0.057381
+vt 0.928158 0.038728
+vt 0.893529 0.160240
+vt 0.933856 0.037321
+vt 0.928950 0.021309
+vt 0.936572 0.009239
+vt 0.945243 0.000481
+vt 0.939216 0.011736
+vt 0.934428 0.020795
+vt 0.403077 0.935992
+vt 0.402495 0.944535
+vt 0.389032 0.944524
+vt 0.046173 0.953391
+vt 0.036199 0.953589
+vt 0.042323 0.943341
+vt 0.404763 0.961014
+vt 0.046098 0.967871
+vt 0.032357 0.969739
+vt 0.403339 0.975332
+vt 0.388237 0.958872
+vt 0.544825 0.949466
+vt 0.547267 0.963589
+vt 0.534130 0.963499
+vt 0.560163 0.971977
+vt 0.560151 0.950717
+vt 0.573967 0.968120
+vt 0.882568 0.143112
+vt 0.860166 0.129326
+vt 0.907705 0.025630
+vt 0.890736 0.021482
+vt 0.892558 0.011737
+vt 0.892535 0.031569
+vt 0.914545 0.046959
+vt 0.914591 0.007295
+vt 0.901242 0.003489
+vt 0.387663 0.858363
+vt 0.382169 0.871841
+vt 0.382160 0.845449
+vt 0.287812 0.575756
+vt 0.290441 0.592347
+vt 0.278006 0.579995
+vt 0.665486 0.555104
+vt 0.280623 0.559591
+vt 0.271479 0.569337
+vt 0.678644 0.549893
+vt 0.695584 0.534597
+vt 0.674728 0.475094
+vt 0.696937 0.547803
+vt 0.716677 0.550454
+vt 0.290438 0.606680
+vt 0.279049 0.606188
+vt 0.657091 0.566097
+vt 0.282187 0.650319
+vt 0.271464 0.641002
+vt 0.672646 0.740908
+vt 0.686105 0.745453
+vt 0.660368 0.772674
+vt 0.612845 0.417112
+vt 0.677338 0.715010
+vt 0.628556 0.387723
+vt 0.678291 0.682483
+vt 0.687661 0.673060
+vt 0.649321 0.382625
+vt 0.665500 0.670260
+vt 0.668316 0.372764
+vt 0.010918 0.857646
+vt 0.003074 0.852778
+vt 0.007957 0.833008
+vt 0.692322 0.410810
+vt 0.664894 0.385317
+vt 0.019641 0.893191
+vt 0.004429 0.893494
+vt 0.695718 0.434580
+vt 0.011022 0.909798
+vt 0.003113 0.917120
+vt 0.697553 0.449366
+vt 0.731348 0.560009
+vt 0.740832 0.551291
+vt 0.737238 0.570513
+vt 0.722808 0.538248
+vt 0.690606 0.465101
+vt 0.685966 0.458432
+vt 0.971872 0.367739
+vt 0.965041 0.372700
+vt 0.965137 0.354837
+vt 0.691850 0.448000
+vt 0.960230 0.354876
+vt 0.967365 0.341660
+vt 0.876672 0.932540
+vt 0.888682 0.914255
+vt 0.891678 0.918392
+vt 0.962518 0.340048
+vt 0.970227 0.326536
+vt 0.876126 0.968132
+vt 0.882578 0.933886
+vt 0.964766 0.325585
+vt 0.992212 0.302440
+vt 0.878644 0.982283
+vt 0.886126 0.979236
+vt 0.293323 0.552914
+vt 0.287227 0.559591
+vt 0.277924 0.548625
+vt 0.887258 0.996091
+vt 0.284753 0.543613
+vt 0.279599 0.527832
+vt 0.617619 0.417765
+vt 0.271464 0.527786
+vt 0.276971 0.497694
+vt 0.609847 0.442157
+vt 0.615436 0.439281
+vt 0.283112 0.499282
+vt 0.293383 0.483978
+vt 0.629089 0.474421
+vt 0.632055 0.467864
+vt 0.960263 0.398447
+vt 0.965065 0.394798
+vt 0.973115 0.427124
+vt 0.642312 0.479234
+vt 0.966757 0.426738
+vt 0.962939 0.440783
+vt 0.674132 0.469272
+vt 0.980585 0.381531
+vt 0.976069 0.386225
+vt 0.657402 0.480346
+vt 0.658227 0.471689
+vt 0.992194 0.387297
+vt 0.987280 0.394798
+vt 0.645278 0.472678
+vt 0.969296 0.441170
+vt 0.960230 0.451689
+vt 0.848897 0.212568
+vt 0.069567 0.861905
+vt 0.034251 0.859087
+vt 0.036739 0.838666
+vt 0.851659 0.239134
+vt 0.056441 0.904337
+vt 0.019641 0.905974
+vt 0.829786 0.310051
+vt 0.806735 0.289884
+vt 0.829875 0.260879
+vt 0.069639 0.935064
+vt 0.033200 0.943341
+vt 0.790224 0.236606
+vt 0.118044 0.620974
+vt 0.768134 0.180721
+vt 0.815329 0.215350
+vt 0.168912 0.615112
+vt 0.750740 0.147811
+vt 0.784181 0.137843
+vt 0.196669 0.612037
+vt 0.786803 0.092928
+vt 0.973956 0.126742
+vt 0.955502 0.118837
+vt 0.974349 0.057381
+vt 0.293347 0.255864
+vt 0.244198 0.302266
+vt 0.232276 0.273305
+vt 0.971296 0.180245
+vt 0.946647 0.177913
+vt 0.197489 0.300883
+vt 0.975820 0.219216
+vt 0.961870 0.225311
+vt 0.044635 0.334821
+vt 0.052749 0.318055
+vt 0.073430 0.334826
+vt 0.291542 0.707522
+vt 0.282041 0.747032
+vt 0.260179 0.749511
+vt 0.206763 0.764225
+vt 0.221410 0.787285
+vt 0.258759 0.718005
+vt 0.160121 0.765444
+vt 0.175836 0.798904
+vt 0.209281 0.729896
+vt 0.991595 0.610973
+vt 0.985811 0.643127
+vt 0.959036 0.636810
+vt 0.946647 0.131914
+vt 0.937759 0.094097
+vt 0.993650 0.582110
+vt 0.963839 0.604470
+vt 0.705460 0.943500
+vt 0.705447 0.971746
+vt 0.680318 0.933724
+vt 0.997819 0.566922
+vt 0.965073 0.571464
+vt 0.164417 0.699950
+vt 0.148191 0.690247
+vt 0.212045 0.694720
+vt 0.388237 0.839269
+vt 0.397104 0.803449
+vt 0.431337 0.825211
+vt 0.090379 0.677657
+vt 0.148191 0.678321
+vt 0.054294 0.703729
+vt 0.236978 0.812687
+vt 0.269541 0.769018
+vt 0.259645 0.686681
+vt 0.192718 0.833859
+vt 0.161685 0.731949
+vt 0.122076 0.321620
+vt 0.102547 0.332408
+vt 0.089911 0.298753
+vt 0.291873 0.677634
+vt 0.388484 0.883509
+vt 0.431283 0.863314
+vt 0.031539 0.722512
+vt 0.396963 0.908442
+vt 0.424335 0.904918
+vt 0.399217 0.921207
+vt 0.018595 0.748511
+vt 0.022305 0.735296
+vt 0.427603 0.889521
+vt 0.401327 0.935982
+vt 0.411945 0.931367
+vt 0.025364 0.770179
+vt 0.150968 0.324854
+vt 0.995722 0.266566
+vt 0.986279 0.266981
+vt 0.021623 0.028995
+vt 0.090949 0.051354
+vt 0.000000 0.088309
+vt 0.488790 0.528813
+vt 0.463735 0.480456
+vt 0.524998 0.416681
+vt 0.076242 0.097555
+vt 0.005195 0.174483
+vt 0.508625 0.579869
+vt 0.559820 0.477814
+vt 0.072375 0.173441
+vt 0.089194 0.275367
+vt 0.666161 0.259383
+vt 0.750740 0.241991
+vt 0.648462 0.308659
+vt 0.046868 0.295953
+vt 0.647141 0.266441
+vt 0.632377 0.309796
+vt 0.131530 0.320231
+vt 0.000000 0.677572
+vt 0.014383 0.696078
+vt 0.279628 0.241727
+vt 0.214236 0.199983
+vt 0.700929 0.114215
+vt 0.616844 0.124949
+vt 0.688231 0.052981
+vt 0.446396 0.332480
+vt 0.534443 0.310083
+vt 0.383195 0.428785
+vt 0.293438 0.128022
+vt 0.357044 0.051228
+vt 0.334774 0.182633
+vt 0.084453 0.453414
+vt 0.080562 0.527766
+vt 0.000000 0.533971
+vt 0.390317 0.096621
+vt 0.445949 0.141554
+vt 0.349045 0.310051
+vt 0.293413 0.265118
+vt 0.417045 0.250122
+vt 0.558936 0.181995
+vt 0.297823 0.391506
+vt 0.796705 0.165139
+vt 0.817076 0.133403
+vt 0.192981 0.583294
+vt 0.173686 0.567072
+vt 0.801163 0.396257
+vt 0.790104 0.379232
+vt 0.872231 0.387077
+vt 0.188949 0.525214
+vt 0.426044 0.040922
+vt 0.453558 0.000000
+vt 0.481124 0.035997
+vt 0.193311 0.466626
+vt 0.151048 0.438756
+vt 0.455943 0.077972
+vt 0.528715 0.070482
+vt 0.220421 0.417216
+vt 0.177263 0.387038
+vt 0.578990 0.083138
+vt 0.574807 0.134582
+vt 0.300784 0.439920
+vt 0.369101 0.479851
+vt 0.345749 0.526557
+vt 0.503511 0.113687
+vt 0.144905 0.498572
+vt 0.888374 0.451818
+vt 0.802145 0.450341
+vt 0.126892 0.594693
+vt 0.841295 0.199560
+vt 0.789101 0.562807
+vt 0.881028 0.554443
+vt 0.859445 0.641337
+vt 0.772716 0.643127
+vt 0.958969 0.456490
+vt 1.000000 0.481292
+vt 0.997371 0.513179
+vt 0.941550 0.229164
+vt 0.943805 0.257234
+vt 0.907121 0.215937
+vt 0.742245 0.891626
+vt 0.742167 0.818061
+vt 0.771679 0.825859
+vt 0.040260 0.620296
+vt 0.709437 0.024009
+vt 0.716745 0.047349
+vt 0.682544 0.052981
+vt 0.682588 0.016128
+vt 0.807439 0.094926
+vt 0.257518 0.532332
+vt 0.239433 0.609174
+vt 0.773111 0.316540
+vt 0.799205 0.310051
+vt 0.841005 0.353190
+vt 0.249753 0.503459
+vt 0.522173 0.010726
+vt 0.539922 0.040900
+vt 0.251286 0.467306
+vt 0.830229 0.914255
+vt 0.876126 0.935925
+vt 0.835226 0.971020
+vt 0.268095 0.418281
+vt 0.150287 0.242345
+vt 0.741381 0.199165
+vt 0.157332 0.164068
+vt 0.666745 0.192101
+vt 0.599673 0.167911
+vt 0.141629 0.323366
+vt 0.604598 0.236508
+vt 0.591031 0.229436
+vt 0.974549 0.057381
+vt 0.962015 0.004063
+vt 0.974670 0.002818
+vt 0.578990 0.222542
+vt 0.214570 0.060249
+vt 0.155458 0.094481
+vt 0.182960 0.029154
+vt 0.438250 0.517557
+vt 0.411483 0.555665
+vt 0.160896 0.000000
+vt 0.115903 0.167895
+vt 0.464931 0.583508
+vt 0.424127 0.598092
+vt 0.122558 0.073078
+vt 0.469617 0.775889
+vt 0.444693 0.744499
+vt 0.472796 0.760358
+vt 0.915120 0.024026
+vt 0.928158 0.028161
+vt 0.924864 0.057381
+vt 0.512187 0.786990
+vt 0.716681 0.938375
+vt 0.718150 0.974956
+vt 0.705585 0.933724
+vt 0.516492 0.807822
+vt 0.559266 0.777975
+vt 0.547741 0.899450
+vt 0.569878 0.927353
+vt 0.568022 0.946860
+vt 0.544402 0.763523
+vt 0.573967 0.718010
+vt 0.546840 0.847981
+vt 0.534113 0.912685
+vt 0.555813 0.715477
+vt 0.534699 0.658345
+vt 0.917062 0.568722
+vt 0.919928 0.514296
+vt 0.928077 0.500021
+vt 0.524739 0.668771
+vt 0.474461 0.632256
+vt 0.888451 0.624979
+vt 0.896928 0.643127
+vt 0.527110 0.682678
+vt 0.453034 0.972444
+vt 0.450489 0.926445
+vt 0.463144 0.937656
+vt 0.750407 0.765874
+vt 0.760480 0.763937
+vt 0.742177 0.818060
+vt 0.572328 0.817894
+vt 0.556853 0.850313
+vt 0.742167 0.719655
+vt 0.753945 0.728824
+vt 0.556248 0.888883
+vt 0.646635 0.942236
+vt 0.661664 0.955732
+vt 0.660301 0.983700
+vt 0.573967 0.909140
+vt 0.487283 0.752201
+vt 0.314645 0.812645
+vt 0.319234 0.852151
+vt 0.298131 0.862243
+vt 0.454536 0.735892
+vt 0.470455 0.732191
+vt 0.322728 0.877397
+vt 0.305626 0.890728
+vt 0.205749 0.165988
+vt 0.744545 0.119434
+vt 0.740942 0.157161
+vt 0.436552 0.605314
+vt 0.470471 0.612764
+vt 0.578990 0.052981
+vt 0.579009 0.032276
+vt 0.607638 0.047743
+vt 0.271089 0.163970
+vt 0.293413 0.468990
+vt 0.271464 0.479118
+vt 0.288585 0.387012
+vt 0.436597 0.720227
+vt 0.445934 0.714582
+vt 0.917383 0.000153
+vt 0.925530 0.004601
+vt 0.115816 0.981074
+vt 0.118504 0.970941
+vt 0.140755 0.972378
+vt 0.436552 0.966881
+vt 0.437843 0.996485
+vt 0.936878 0.333944
+vt 0.919535 0.302500
+vt 0.940662 0.325380
+vt 0.477205 0.971782
+vt 0.468343 0.971215
+vt 0.463191 0.935729
+vt 0.911753 0.324383
+vt 0.742643 0.020180
+vt 0.742625 0.052981
+vt 0.730241 0.030939
+vt 0.227876 0.101593
+vt 0.231843 0.113282
+vt 0.204130 0.112553
+vt 0.373004 0.938850
+vt 0.341810 0.918174
+vt 0.352488 0.902558
+vt 0.445742 0.693100
+vt 0.464410 0.713025
+vt 0.323216 0.907879
+vt 0.334743 0.892059
+vt 0.274407 0.133698
+vt 0.253815 0.101566
+vt 0.262011 0.468389
+vt 0.269549 0.474025
+vt 0.362362 0.953970
+vt 0.293413 0.926874
+vt 0.191314 0.147209
+vt 0.198461 0.137712
+vt 0.228115 0.833859
+vt 0.237588 0.842129
+vt 0.228102 0.863156
+vt 0.262849 0.080627
+vt 0.247426 0.094018
+vt 0.241015 0.083257
+vt 0.343782 0.884686
+vt 0.332401 0.868636
+vt 0.358423 0.894635
+vt 0.200855 0.102343
+vt 0.378433 0.910831
+vt 0.372498 0.918754
+vt 0.682730 0.016103
+vt 0.682544 0.002001
+vt 0.692186 0.016128
+vt 0.724377 0.021299
+vt 0.723766 0.039776
+vt 0.919413 0.335515
+vt 0.922032 0.341694
+vt 0.735623 0.011403
+vt 0.579181 0.010881
+vt 0.578990 0.000422
+vt 0.589880 0.000221
+vt 0.477227 0.931627
+vt 0.472707 0.939663
+vt 0.466628 0.926445
+vt 0.127163 0.964777
+vt 0.656291 0.827125
+vt 0.646760 0.822423
+vt 0.659562 0.812741
+vt 0.274328 0.058709
+vt 0.256645 0.070319
+vt 0.328224 0.841885
+vt 0.293413 0.034580
+vt 0.269415 0.048081
+vt 0.322533 0.803449
+vt 0.514073 0.953776
+vt 0.502008 0.926445
+vt 0.524237 0.954869
+vt 0.058731 0.948538
+vt 0.069639 0.943341
+vt 0.069229 0.972115
+vt 0.502043 0.988244
+vt 0.656164 0.942236
+vt 0.646635 0.934228
+vt 0.676779 0.920740
+vt 0.754919 0.806147
+vt 0.767878 0.759850
+vt 0.668761 0.913325
+vt 0.680318 0.875038
+vt 0.115789 0.934277
+vt 0.669934 0.869218
+vt 0.937805 0.340789
+vt 0.921262 0.357052
+vt 0.960716 0.766262
+vt 0.966081 0.745894
+vt 0.978418 0.754295
+vt 0.935919 0.362799
+vt 0.914530 0.378340
+vt 0.962922 0.785734
+vt 0.973734 0.768695
+vt 0.928471 0.383507
+vt 0.920218 0.400951
+vt 0.964646 0.804624
+vt 0.976432 0.808158
+vt 0.906306 0.396678
+vt 0.904620 0.415073
+vt 0.960115 0.816460
+vt 0.888392 0.413572
+vt 0.888374 0.385963
+vt 0.990424 0.810631
+vt 0.972452 0.824861
+vt 0.894160 0.366816
+vt 0.340570 0.853133
+vt 0.352585 0.867795
+vt 0.903220 0.352638
+vt 0.988911 0.774053
+vt 0.990155 0.792362
+vt 0.990439 0.748414
+vt 0.964935 0.294592
+vt 0.946647 0.295006
+vt 0.957701 0.285534
+vt 0.950832 0.746266
+vt 0.967925 0.734537
+vt 0.960230 0.387963
+vt 0.947345 0.337758
+vt 0.202176 0.926813
+vt 0.199253 0.906246
+vt 0.227878 0.903815
+vt 0.957524 0.433422
+vt 0.193370 0.888295
+vt 0.227910 0.857816
+vt 0.928191 0.456490
+vt 0.920393 0.414168
+vt 0.191706 0.874217
+vt 0.206902 0.833859
+vt 0.899452 0.450981
+vt 0.682544 0.042569
+vt 0.669127 0.049230
+vt 0.682532 0.009091
+vt 0.657923 0.024764
+vt 0.931295 0.771810
+vt 0.950796 0.833564
+vt 0.908444 0.812087
+vt 0.932674 0.625935
+vt 0.958933 0.559572
+vt 0.935205 0.702058
+vt 0.896056 0.755792
+vt 0.930564 0.571051
+vt 0.947207 0.487149
+vt 0.950832 0.647836
+vt 0.934543 0.643127
+vt 0.888374 0.462578
+vt 0.897775 0.917074
+vt 0.896056 0.869807
+vt 0.923249 0.901211
+vt 0.867937 0.053932
+vt 0.848780 0.051662
+vt 0.837894 0.000898
+vt 0.901800 0.957875
+vt 0.797675 0.914255
+vt 0.772716 0.896319
+vt 0.811234 0.860706
+vt 0.772771 0.953946
+vt 0.779125 0.918041
+vt 0.818698 0.914255
+vt 0.777274 0.839855
+vt 0.816586 0.813804
+vt 0.896056 0.723908
+vt 0.774883 0.714392
+vt 0.888948 0.778303
+vt 0.888888 0.849684
+vt 0.894645 0.778204
+vt 0.589970 0.908303
+vt 0.602847 0.812741
+vt 0.642964 0.826913
+vt 0.911255 0.858959
+vt 0.938529 0.833564
+vt 0.573967 0.852462
+vt 0.830229 0.982701
+vt 0.772716 0.979795
+vt 0.786142 0.801659
+vt 0.798565 0.781550
+vt 0.250352 0.056629
+vt 0.400765 0.605314
+vt 0.309746 0.524160
+vt 0.084396 0.944480
+vt 0.115704 0.925971
+vt 0.115789 0.973867
+vt 0.938529 0.953736
+vt 0.978376 0.923752
+vt 0.978415 0.991743
+vt 0.680372 0.855450
+vt 0.524121 0.840909
+vt 0.867998 0.000898
+vt 0.992085 0.875683
+vt 0.102322 0.840403
+vt 0.996518 0.734537
+vt 0.436552 0.914030
+vt 0.247790 0.925712
+vt 0.291873 0.859734
+vt 0.528315 0.850824
+vt 0.957939 0.057381
+vt 0.950958 0.673094
+vt 0.381972 0.845449
+vt 0.027290 0.985056
+vt 0.748086 0.052981
+vt 0.080713 0.963798
+vt 0.422314 0.605314
+vt 0.866366 0.057381
+vt 0.178251 0.387012
+vt 0.730430 0.801134
+vt 0.615960 0.012501
+vt 0.182570 0.658044
+vt 0.715539 0.412961
+vt 0.175175 0.951396
+vt 0.905346 0.283978
+vt 0.742229 0.595793
+vt 0.625767 0.764989
+vt 0.670117 0.942236
+vt 0.431067 0.965938
+vt 0.057818 0.964482
+vt 0.290288 0.656800
+vt 0.275795 0.928390
+vt 0.250418 0.984964
+vt 0.271464 0.655049
+vt 0.418881 0.935982
+vt 0.757133 0.891626
+vt 0.771615 0.963686
+vt 0.261584 0.925712
+vt 0.318632 0.772524
+vt 0.946647 0.005174
+vt 0.389614 0.935982
+vt 0.032349 0.943538
+vt 0.389591 0.970870
+vt 0.534113 0.946861
+vt 0.573955 0.946861
+vt 0.871799 0.123096
+vt 0.282006 0.592702
+vt 0.651936 0.766901
+vt 0.015624 0.843418
+vt 0.683037 0.420436
+vt 0.747687 0.564956
+vt 0.690498 0.434794
+vt 0.884120 0.966304
+vt 0.987271 0.295381
+vt 0.891744 0.988908
+vt 0.634172 0.392425
+vt 0.289397 0.479118
+vt 0.968068 0.454915
+vt 0.067897 0.833008
+vt 0.848983 0.289137
+vt 0.848862 0.280058
+vt 0.070335 0.619675
+vt 0.995519 0.075956
+vt 0.682166 0.964164
+vt 0.958933 0.542355
+vt 0.157978 0.677572
+vt 0.281208 0.788707
+vt 0.417454 0.918577
+vt 0.013742 0.760307
+vt 0.573286 0.543916
+vt 0.746338 0.310051
+vt 0.625008 0.070302
+vt 0.573967 0.393944
+vt 0.006095 0.444935
+vt 0.512750 0.290800
+vt 0.375778 0.310051
+vt 0.840687 0.147444
+vt 0.293413 0.492756
+vt 0.112873 0.387012
+vt 0.958933 0.541902
+vt 0.907200 0.294475
+vt 0.757330 0.887300
+vt 0.073540 0.637403
+vt 0.848897 0.057381
+vt 0.876093 0.991275
+vt 0.915147 0.045144
+vt 0.705575 0.975592
+vt 0.534160 0.847858
+vt 0.486472 0.652718
+vt 0.463191 0.990955
+vt 0.564569 0.807822
+vt 0.646642 0.979506
+vt 0.521030 0.773446
+vt 0.293484 0.814900
+vt 0.723208 0.112348
+vt 0.451095 0.636749
+vt 0.615897 0.011992
+vt 0.271510 0.406966
+vt 0.141132 0.996371
+vt 0.933010 0.295381
+vt 0.461655 0.694830
+vt 0.251509 0.102830
+vt 0.224601 0.091383
+vt 0.692919 0.001283
+vt 0.716745 0.030999
+vt 0.589845 0.011992
+vt 0.148191 0.966083
+vt 0.668631 0.816303
+vt 0.289262 0.025600
+vt 0.510448 0.929062
+vt 0.057821 0.977308
+vt 0.511295 0.989598
+vt 0.766736 0.801858
+vt 0.123092 0.925971
+vt 0.973850 0.789527
+vt 0.989978 0.827716
+vt 0.912681 0.331228
+vt 0.946651 0.266981
+vt 0.200116 0.949494
+vt 0.915881 0.689226
+vt 0.906453 0.456490
+vt 0.867965 0.003514
+vt 0.938354 0.942003
+vt 0.808896 0.953046
+vt 0.888107 0.677106
+vt 0.795886 0.778303
+vt 0.642978 0.947703
+vt 0.850209 0.800478
+vt 0.173625 0.121435
+vt 0.080883 0.986508
+vt 0.946910 1.001198
+vn 0.671345 -0.197092 0.714459
+vn -0.666010 -0.204926 0.717242
+vn 0.832580 -0.301659 0.464556
+vn -0.830101 -0.307090 0.465433
+vn 0.425758 -0.796683 0.428983
+vn -0.408092 -0.803818 0.432825
+vn 0.326498 -0.495376 0.804986
+vn -0.371366 -0.486617 0.790753
+vn -0.039277 -0.523693 0.851001
+vn 0.064930 -0.571380 0.818113
+vn -0.283710 -0.844293 0.454619
+vn 0.273789 -0.831508 0.483356
+vn -0.765568 -0.322344 0.556777
+vn 0.760570 -0.339952 0.553142
+vn -0.465798 -0.186319 0.865053
+vn 0.464927 -0.195759 0.863436
+vn -0.467208 0.169894 0.867671
+vn 0.498343 0.181216 0.847830
+vn -0.771027 0.324643 0.547835
+vn 0.768350 0.329293 0.548821
+vn -0.265910 0.820997 0.505229
+vn 0.248737 0.824892 0.507626
+vn -0.055385 0.553849 0.830773
+vn 0.101652 0.551827 0.827740
+vn 0.332862 0.523069 0.784603
+vn -0.344839 0.578837 0.738941
+vn 0.424567 0.771088 0.474516
+vn -0.423136 0.752934 0.504030
+vn 0.825075 0.296789 0.480799
+vn -0.828520 0.299015 0.473440
+vn 0.688799 0.186793 0.700474
+vn -0.665187 0.175917 0.725658
+vn 0.839964 0.343622 -0.419982
+vn -0.768350 0.329293 -0.548821
+vn 0.207390 0.829561 -0.518476
+vn -0.197727 0.815623 -0.543749
+vn -0.408248 0.816497 -0.408248
+vn 0.438063 0.798820 -0.412294
+vn -0.796396 0.289598 -0.530930
+vn 0.786146 0.327561 -0.524097
+vn -0.789474 -0.315789 -0.526316
+vn 0.851943 -0.340777 -0.397573
+vn -0.408248 -0.816497 -0.408248
+vn 0.405616 -0.760530 -0.507020
+vn 0.207390 -0.829561 -0.518476
+vn -0.214297 -0.826574 -0.520435
+vn 0.829740 -0.373383 -0.414870
+vn -0.839964 -0.343622 -0.419982
+vn 0.400039 -0.062344 0.914375
+vn -0.400039 -0.062344 0.914375
+vn 0.306938 -0.175393 0.935429
+vn -0.306938 -0.175393 0.935429
+vn 0.094512 -0.183464 0.978473
+vn -0.094512 -0.183464 0.978473
+vn -0.062353 -0.028342 0.997652
+vn 0.062353 -0.028342 0.997652
+vn -0.062357 0.025982 0.997716
+vn 0.062357 0.025982 0.997716
+vn 0.099561 0.172922 0.979891
+vn -0.099561 0.172922 0.979891
+vn 0.303571 0.165584 0.938311
+vn -0.303571 0.165584 0.938311
+vn 0.400163 0.057166 0.914659
+vn -0.400163 0.057166 0.914659
+vn 0.136692 -0.874826 0.464752
+vn -0.105862 -0.880771 0.461558
+vn 0.230289 -0.865570 0.444697
+vn -0.196715 -0.885219 0.421533
+vn 0.595880 -0.425628 0.681005
+vn -0.623035 -0.426287 0.655826
+vn 0.756337 -0.029855 0.653501
+vn -0.789793 -0.017320 0.613129
+vn 0.806929 0.068934 0.586612
+vn -0.752771 0.054417 0.656029
+vn 0.233373 -0.777910 0.583432
+vn -0.435894 -0.688253 0.579917
+vn 0.355697 -0.729019 0.584817
+vn -0.292803 -0.619134 0.728656
+vn 0.687191 -0.419138 0.593373
+vn -0.689836 -0.414590 0.593500
+vn 0.702848 -0.391536 0.593889
+vn -0.572975 -0.431433 0.696825
+vn 0.312694 0.342474 0.885965
+vn -0.386059 0.714362 0.583649
+vn 0.509058 0.648239 0.566256
+vn -0.507932 0.641599 0.574766
+vn 0.615457 0.492366 0.615457
+vn -0.581008 0.510582 0.633826
+vn -0.051675 0.664392 0.745596
+vn 0.037139 0.668503 0.742781
+vn -0.787931 0.307647 0.533403
+vn 0.738632 0.376802 0.558965
+vn -0.622543 0.553372 0.553372
+vn 0.577350 0.577350 0.577350
+vn 0.507023 -0.628103 0.590266
+vn -0.401601 -0.395017 0.826244
+vn 0.218075 -0.468459 0.856148
+vn -0.222422 -0.467656 0.855468
+vn -0.034841 -0.579236 0.814415
+vn 0.107349 -0.500959 0.858787
+vn -0.089902 -0.784316 0.613813
+vn 0.077015 -0.575864 0.813910
+vn 0.054668 -0.169470 0.984018
+vn -0.027886 -0.864453 0.501940
+vn 0.425985 -0.060855 0.902681
+vn -0.168675 -0.312751 0.934738
+vn 0.335168 -0.182819 0.924251
+vn -0.343363 -0.105650 0.933242
+vn 0.337090 -0.316865 0.886548
+vn -0.322277 -0.276237 0.905445
+vn 0.428411 0.149446 0.891140
+vn -0.481543 -0.240772 0.842701
+vn -0.031654 -0.189927 0.981288
+vn 0.031654 -0.189927 0.981288
+vn 0.681885 -0.291451 0.670887
+vn -0.429933 -0.721674 0.542535
+vn 0.262316 -0.349754 0.899368
+vn -0.054742 -0.361903 0.930607
+vn -0.062564 -0.137640 0.988504
+vn -0.058512 -0.084517 0.994703
+vn -0.013557 -0.650732 0.759187
+vn -0.097666 -0.647680 0.755626
+vn 0.240428 -0.547641 0.801426
+vn -0.147043 -0.661693 0.735214
+vn 0.312808 -0.166179 0.935166
+vn -0.482516 -0.140734 0.864507
+vn 0.282128 -0.016382 0.959237
+vn -0.332048 -0.007298 0.943234
+vn 0.327251 -0.143172 0.934028
+vn -0.313971 -0.145772 0.938175
+vn -0.023219 0.051082 0.998425
+vn 0.000000 0.066519 0.997785
+vn 0.000000 -0.064382 0.997925
+vn 0.000000 -0.066519 0.997785
+vn 0.000000 0.000000 1.000000
+vn 0.782609 -0.608696 -0.130435
+vn -0.744073 -0.658219 0.114473
+vn 0.925624 0.249207 -0.284808
+vn -0.944759 0.191904 -0.265713
+vn 0.069264 0.900436 -0.429439
+vn -0.098456 0.886108 -0.452900
+vn -0.854358 0.512615 -0.085436
+vn 0.690456 0.549227 0.470766
+vn 0.407110 -0.895642 0.179128
+vn -0.398334 -0.876334 0.270867
+vn 0.287348 -0.574696 0.766261
+vn -0.287348 -0.574696 0.766261
+vn -0.781404 0.558146 0.279073
+vn 0.666667 0.666667 0.333333
+vn 0.134763 0.808581 0.572745
+vn -0.127000 0.762001 0.635001
+vn 0.753250 0.286952 0.591839
+vn -0.745356 0.298142 0.596285
+vn 0.411596 -0.857493 0.308697
+vn -0.411596 -0.857493 0.308697
+vn 0.050217 0.234345 0.970856
+vn -0.048634 0.226961 0.972689
+vn -0.056293 -0.262700 0.963234
+vn -0.428571 -0.857143 0.285714
+vn -0.063119 -0.820553 0.568075
+vn 0.063119 -0.820553 0.568075
+vn -0.872872 -0.218218 0.436436
+vn -0.581914 -0.363696 0.727393
+vn 0.545986 -0.431042 0.718403
+vn -0.243483 -0.268671 0.931951
+vn 0.323072 0.031139 0.945862
+vn -0.282005 0.033841 0.958816
+vn 0.735695 0.390999 0.553058
+vn -0.816497 0.408248 0.408248
+vn 0.847998 0.317999 0.423999
+vn -0.868220 0.325582 0.374420
+vn 0.958645 0.066419 0.276745
+vn -0.910178 -0.044591 0.411810
+vn 0.178331 -0.416107 0.891657
+vn -0.357930 -0.835170 0.417585
+vn -0.135319 -0.202979 0.969788
+vn 0.175113 -0.204298 0.963119
+vn -0.356915 0.107075 0.927980
+vn 0.121942 -0.182913 0.975537
+vn -0.124035 0.000000 0.992278
+vn 0.156174 0.312348 0.937043
+vn -0.158235 0.949410 0.271261
+vn 0.158235 0.949410 0.271261
+vn -0.739600 0.647150 0.184901
+vn 0.723842 0.685745 0.076194
+vn -1.000000 -0.000000 0.000000
+vn 1.000000 -0.000000 0.000000
+vn 0.305141 -0.944953 0.118118
+vn -0.305141 -0.944953 0.118118
+vn 0.047836 -0.287019 0.956730
+vn -0.052632 -0.315789 0.947368
+vn 0.135293 -0.347895 0.927720
+vn -0.135293 -0.347895 0.927720
+vn -0.448143 -0.293016 0.844577
+vn 0.548821 -0.329293 0.768350
+vn -0.286864 -0.103271 0.952389
+vn 0.494481 -0.113024 0.861809
+vn -0.270910 0.028025 0.962197
+vn 0.259500 0.103800 0.960149
+vn -0.577350 -0.577350 0.577350
+vn 0.668410 -0.459532 0.584858
+vn -0.115617 -0.635891 0.763069
+vn 0.115617 -0.635891 0.763069
+vn 0.424182 -0.621123 0.658996
+vn -0.397220 -0.635553 0.662034
+vn 0.476654 -0.355712 0.803909
+vn -0.516784 -0.214514 0.828805
+vn 0.587096 -0.083871 0.805161
+vn -0.588227 -0.115717 0.800374
+vn 0.565685 0.119664 0.815892
+vn -0.573167 0.124602 0.809910
+vn 0.408248 0.408248 0.816497
+vn -0.434745 0.702281 0.563736
+vn 0.335769 0.347761 0.875398
+vn -0.335769 0.347761 0.875398
+vn 0.145172 0.377446 0.914582
+vn -0.177192 0.389823 0.903682
+vn -0.021878 0.306290 0.951687
+vn -0.030080 0.230612 0.972581
+vn 0.447549 -0.469927 0.760834
+vn -0.355266 -0.573890 0.737859
+vn 0.262705 -0.225176 0.938233
+vn -0.296334 -0.211667 0.931334
+vn -0.276289 -0.303918 0.911755
+vn 0.063119 -0.315597 0.946792
+vn -0.116248 -0.929981 0.348743
+vn 0.201574 -0.907083 0.369552
+vn -0.381000 -0.254000 0.889001
+vn 0.335624 -0.239732 0.910980
+vn -0.439232 -0.038194 0.897561
+vn 0.456759 0.050751 0.888142
+vn -0.221581 0.569780 0.791361
+vn 0.024676 0.407159 0.913024
+vn -0.021330 0.554574 0.831861
+vn 0.048679 0.681509 0.730189
+vn 0.377792 0.634151 0.674629
+vn -0.366677 0.516064 0.774097
+vn 0.498784 0.529958 0.685828
+vn -0.498784 0.529958 0.685828
+vn 0.789474 -0.315789 0.526316
+vn -0.738200 -0.461375 0.492133
+vn 0.806970 -0.080697 0.585053
+vn -0.806064 -0.065357 0.588209
+vn 0.786796 0.121046 0.605228
+vn -0.790345 0.112906 0.602168
+vn -0.694716 0.709497 -0.118250
+vn 0.635707 0.681115 -0.363261
+vn -0.855186 0.366508 -0.366508
+vn 0.850680 0.365049 -0.378263
+vn -0.267242 0.849692 -0.454539
+vn 0.219716 0.862587 -0.455706
+vn 0.593246 0.744466 -0.306316
+vn -0.596285 0.745356 -0.298142
+vn 0.371427 0.868458 -0.328363
+vn -0.383926 0.874593 -0.296122
+vn 0.276049 0.915865 -0.291529
+vn -0.285868 0.911603 -0.295397
+vn 0.887283 0.134291 -0.441243
+vn -0.793636 0.212659 -0.570015
+vn 0.544157 -0.752414 -0.371169
+vn -0.595505 -0.712308 -0.371472
+vn 0.402739 -0.732252 -0.549189
+vn -0.249041 -0.774794 -0.581096
+vn 0.361678 -0.385790 -0.848738
+vn -0.043139 -0.413418 -0.909519
+vn 0.195180 -0.097590 -0.975900
+vn -0.318353 -0.094327 -0.943268
+vn -0.010730 -0.563304 -0.826180
+vn -0.309502 -0.535676 -0.785659
+vn 0.077851 -0.994757 -0.066317
+vn -0.177679 -0.981909 -0.065461
+vn 0.109450 -0.971782 -0.208950
+vn -0.134050 -0.968141 -0.211502
+vn 0.815044 -0.562099 -0.140525
+vn -0.980180 0.192192 0.048048
+vn 0.935848 0.139584 -0.323581
+vn -0.944069 0.184939 -0.273005
+vn 0.113195 -0.027386 -0.993195
+vn -0.247475 -0.016921 -0.968747
+vn -0.209312 -0.114950 -0.971069
+vn 0.149683 -0.363517 -0.919484
+vn 0.909376 0.137065 -0.392745
+vn -0.204116 0.123707 -0.971099
+vn 0.919259 0.139282 -0.368188
+vn -0.918440 0.135786 -0.371525
+vn 0.917286 0.343982 -0.200656
+vn -0.931845 0.289437 -0.218842
+vn 0.900405 0.364177 -0.238005
+vn -0.913248 0.296189 -0.279734
+vn 0.894509 0.433702 0.108425
+vn -0.882456 0.455774 -0.116368
+vn 0.159617 -0.957704 -0.239426
+vn -0.279448 -0.931493 -0.232873
+vn 0.369277 -0.471184 -0.801012
+vn -0.367655 -0.477093 -0.798255
+vn 0.298594 -0.823644 -0.482133
+vn -0.290628 -0.841642 -0.455163
+vn 0.261968 -0.957376 -0.121675
+vn -0.303090 -0.946422 -0.111459
+vn 0.299629 -0.944285 -0.136195
+vn -0.348743 -0.929981 -0.116248
+vn 0.830482 0.333323 -0.446313
+vn -0.690268 -0.721850 0.049627
+vn 0.686895 -0.635774 0.352088
+vn -0.861521 -0.337915 0.378940
+vn 0.295027 -0.045448 -0.954408
+vn -0.256742 -0.180715 -0.949434
+vn 0.127188 0.965780 0.226034
+vn -0.129094 0.960558 0.246297
+vn 0.120835 0.973395 -0.194679
+vn -0.137321 0.971291 -0.194258
+vn 0.313998 0.571101 -0.758452
+vn -0.387556 0.555474 -0.735696
+vn 0.323051 0.928772 -0.181716
+vn -0.565951 0.760496 -0.318347
+vn -0.094386 0.670139 0.736210
+vn -0.045220 0.795467 0.604308
+vn 0.614433 0.769593 0.173779
+vn -0.583767 0.791981 0.178834
+vn 0.693451 0.685709 -0.221197
+vn -0.715914 0.664472 -0.214346
+vn 0.710443 0.136367 -0.690417
+vn -0.716578 0.217341 -0.662781
+vn 0.317910 0.570368 -0.757373
+vn -0.058015 0.367429 -0.928241
+vn 0.628942 0.762354 -0.152471
+vn -0.595903 0.773063 -0.217424
+vn 0.708828 0.683278 0.175199
+vn -0.690541 0.710905 0.133295
+vn 0.688531 0.382966 0.615842
+vn -0.677195 0.482375 0.555627
+vn 0.366927 0.883961 -0.289789
+vn -0.434689 0.895385 -0.096597
+vn 0.285430 0.623718 0.727671
+vn -0.299340 0.493283 0.816742
+vn -0.181856 0.114502 -0.976636
+vn 0.178174 0.089087 -0.979958
+vn -0.263846 0.946247 -0.187091
+vn -0.023299 0.968843 -0.246579
+vn -0.161572 0.184654 0.969432
+vn 0.161572 0.184654 0.969432
+vn 0.868097 0.089260 -0.488304
+vn -0.966016 -0.164293 0.199549
+vn 0.975806 0.124056 0.180033
+vn -0.945595 0.013329 0.325072
+vn 0.961281 0.147200 -0.232960
+vn -0.996980 0.075751 0.017105
+vn 0.981655 -0.030360 -0.188235
+vn -0.995115 -0.093955 0.030308
+vn 0.746645 -0.664612 0.028490
+vn -0.662473 -0.749076 -0.003701
+vn 0.372268 -0.924250 0.084723
+vn -0.372238 -0.924278 0.084555
+vn 0.528122 -0.835411 0.152235
+vn -0.387671 -0.903540 0.182554
+vn 0.307017 -0.523735 0.794633
+vn -0.848946 -0.221464 0.479839
+vn 0.732489 -0.636817 0.240675
+vn -0.732489 -0.636817 0.240675
+vn 0.263732 -0.449896 0.853252
+vn -0.263732 -0.449896 0.853252
+vn 0.588064 -0.307010 -0.748282
+vn -0.538262 -0.284111 -0.793445
+vn 0.469354 -0.239970 -0.849777
+vn -0.431030 -0.297118 -0.852017
+vn 0.446259 -0.845188 -0.294125
+vn -0.456721 -0.777659 -0.432033
+vn 0.697341 -0.661021 -0.277068
+vn -0.744954 -0.620629 -0.244671
+vn 0.497205 -0.440774 -0.747333
+vn -0.497205 -0.440774 -0.747333
+vn 0.369098 0.285529 0.884443
+vn -0.259062 0.456442 0.851203
+vn 0.464866 0.259346 0.846545
+vn -0.503292 0.047933 0.862786
+vn 0.318838 0.199274 0.926624
+vn -0.415279 0.123700 0.901244
+vn 0.207613 -0.083622 0.974630
+vn -0.196561 -0.050960 0.979166
+vn 0.339755 0.082365 0.936900
+vn -0.372046 0.212598 0.903540
+vn 0.650897 -0.193884 0.733990
+vn -0.624651 -0.412140 0.663289
+vn 0.327986 0.782120 0.529823
+vn -0.407491 0.750641 0.520087
+vn -0.264198 0.830336 0.490653
+vn 0.265483 0.829636 0.491145
+vn -0.863868 0.259160 0.431934
+vn 0.788502 0.236551 0.567722
+vn -0.528033 -0.356779 0.770643
+vn 0.524176 -0.354827 0.774168
+vn 0.466310 -0.599079 0.650891
+vn -0.415649 -0.619625 0.665808
+vn 0.688802 -0.442802 0.574002
+vn -0.714339 -0.416698 0.562212
+vn 0.750717 -0.613086 -0.246068
+vn -0.622061 -0.774466 -0.115081
+vn -0.184950 0.249468 0.950557
+vn 0.217521 0.273296 0.937013
+vn 0.904560 -0.386856 -0.179205
+vn -0.914238 -0.366421 -0.172931
+vn 0.178174 -0.089087 0.979958
+vn -0.178174 -0.089087 0.979958
+vn -0.233516 0.897192 0.374854
+vn -0.023355 0.994904 0.098089
+vn 0.447955 -0.447955 0.773740
+vn -0.580247 0.197531 0.790123
+vn 0.531271 0.584398 0.613376
+vn -0.580199 0.193400 0.791180
+vn 0.553372 -0.553372 0.622543
+vn -0.749675 -0.270716 0.603905
+vn 0.572384 -0.312209 0.758223
+vn -0.689502 -0.376092 0.618985
+vn 0.559681 -0.553321 0.616922
+vn -0.466760 -0.432937 0.771169
+vn 0.955108 -0.163648 -0.246959
+vn -0.877870 -0.478838 0.007601
+vn 0.922712 -0.376548 -0.082547
+vn -0.912871 -0.365148 -0.182574
+vn 0.997202 -0.018131 -0.072524
+vn -0.997202 -0.018131 -0.072524
+vn 0.766105 -0.636256 0.090894
+vn -0.676753 -0.728811 0.104116
+vn 0.781499 -0.617636 0.088234
+vn -0.775715 -0.617699 0.129286
+vn 0.702247 -0.702247 0.117041
+vn -0.702247 -0.702247 0.117041
+vn 0.124008 0.992066 0.020668
+vn -0.122756 0.982049 -0.143215
+vn 0.943456 0.314485 0.104828
+vn -0.937043 0.312348 0.156174
+vn 0.707107 -0.707107 -0.000000
+vn -0.624695 -0.780869 -0.000000
+vn -0.015712 0.989827 0.141404
+vn 0.015712 0.989827 0.141404
+vn 0.626572 -0.721149 0.295553
+vn -0.586648 -0.752681 0.298858
+vn 0.271445 -0.902154 0.335314
+vn -0.252880 -0.908786 0.331904
+vn -0.827110 -0.448433 -0.338816
+vn 0.865125 -0.485314 -0.126604
+vn -0.847427 0.254228 -0.466085
+vn 0.853765 0.232845 -0.465690
+vn -0.635053 0.589692 -0.498970
+vn 0.543305 0.698536 -0.465690
+vn -0.007071 0.989925 0.141418
+vn 0.109559 0.993857 -0.015651
+vn 0.104604 0.039227 0.993740
+vn -0.149019 0.055882 0.987254
+vn 0.246106 0.085190 0.965492
+vn -0.312348 0.156174 0.937043
+vn 0.322800 -0.046114 0.945343
+vn -0.236807 0.035521 0.970907
+vn 0.210358 0.012374 0.977546
+vn -0.155869 -0.034638 0.987170
+vn 0.567881 0.191574 0.800507
+vn -0.308264 -0.181332 0.933859
+vn 0.378665 -0.036410 0.924817
+vn -0.400809 -0.007157 0.916134
+vn 0.252982 -0.189737 0.948683
+vn -0.082885 -0.062164 0.994618
+vn 0.135079 -0.022513 0.990579
+vn -0.071067 -0.071067 0.994937
+vn -0.487049 0.608811 0.626205
+vn 0.404820 0.751809 0.520483
+vn 0.691363 -0.055889 0.720342
+vn -0.557086 -0.148556 0.817060
+vn 0.438819 -0.200755 0.875862
+vn -0.452596 -0.177557 0.873859
+vn 0.578610 -0.133351 0.804629
+vn -0.411054 -0.845597 0.340588
+vn 0.577089 0.216408 0.787487
+vn -0.525058 0.196897 0.827977
+vn 0.297964 0.580246 0.757979
+vn -0.297964 0.580246 0.757979
+vn 0.093117 -0.993245 -0.069241
+vn -0.110453 -0.991568 -0.067778
+vn 0.516067 -0.852690 -0.081209
+vn -0.446086 -0.890959 -0.084853
+vn 0.930889 -0.254130 0.262417
+vn -0.924652 -0.253129 0.284508
+vn 0.846495 0.529059 -0.059519
+vn -0.847951 0.529969 0.010599
+vn -0.298426 0.899733 -0.318470
+vn 0.214568 0.924293 -0.315662
+vn -0.542987 0.818859 -0.186104
+vn 0.419582 0.885145 -0.201169
+vn -0.548228 -0.003883 -0.836320
+vn 0.547026 -0.014395 -0.836991
+vn -0.266747 0.006422 -0.963745
+vn 0.255561 -0.074948 -0.963884
+vn 0.404624 0.026581 -0.914097
+vn -0.404624 0.026581 -0.914097
+vn -0.748378 0.662720 -0.027050
+vn 0.733011 0.678579 0.047174
+vn 0.816497 -0.408248 -0.408248
+vn -0.684353 -0.171088 -0.708794
+vn -0.360377 -0.828294 -0.429020
+vn 0.360377 -0.828294 -0.429020
+vn 0.661707 -0.202628 0.721862
+vn -0.663036 -0.192883 0.723312
+vn 0.826834 -0.305141 0.472477
+vn -0.828520 -0.299015 0.473440
+vn 0.407625 -0.790545 0.457034
+vn -0.425062 -0.779280 0.460484
+vn 0.379067 -0.516315 0.767937
+vn -0.338487 -0.548583 0.764515
+vn -0.099184 -0.547220 0.831091
+vn 0.085882 -0.522161 0.848512
+vn -0.258889 -0.838801 0.478945
+vn 0.266350 -0.848665 0.456974
+vn -0.774251 -0.344719 0.530758
+vn 0.782420 -0.329440 0.528477
+vn -0.470597 -0.198146 0.859812
+vn 0.476731 -0.190693 0.858116
+vn -0.482283 0.203067 0.852154
+vn 0.464927 0.195759 0.863436
+vn -0.764039 0.327842 0.555665
+vn 0.765568 0.322344 0.556777
+vn -0.241291 0.814358 0.527825
+vn 0.255987 0.807343 0.531665
+vn -0.115470 0.577350 0.808290
+vn 0.082138 0.602344 0.793999
+vn 0.386060 0.544620 0.744544
+vn -0.378344 0.513467 0.770200
+vn 0.405914 0.764073 0.501423
+vn -0.406930 0.777955 0.478742
+vn 0.829869 0.294011 0.474211
+vn -0.827165 0.292478 0.479847
+vn 0.661707 0.202628 0.721862
+vn -0.674819 0.209652 0.707577
+vn 0.781572 0.305832 -0.543702
+vn -0.847998 0.317999 -0.423999
+vn 0.203653 0.814613 -0.543075
+vn -0.214297 0.826574 -0.520435
+vn -0.432041 0.750388 -0.500258
+vn 0.405616 0.760530 -0.507020
+vn -0.846181 0.352575 -0.399585
+vn 0.864242 0.314270 -0.392837
+vn -0.832845 -0.378566 -0.403804
+vn 0.778250 -0.353750 -0.518833
+vn -0.432041 -0.750388 -0.500258
+vn 0.438063 -0.798820 -0.412294
+vn 0.203653 -0.814613 -0.543075
+vn -0.197727 -0.815623 -0.543749
+vn 0.768350 -0.329293 -0.548821
+vn -0.752217 -0.356313 -0.554265
+vn 0.105409 -0.843274 0.527046
+vn -0.141433 -0.839474 0.524671
+vn 0.191556 -0.862004 0.469313
+vn -0.233571 -0.850198 0.471813
+vn 0.578793 -0.504905 0.640367
+vn -0.548630 -0.488780 0.678306
+vn 0.776303 -0.063330 0.627171
+vn -0.756147 -0.069645 0.650685
+vn 0.747085 0.113195 0.655020
+vn -0.801465 0.121434 0.585582
+vn 0.374655 -0.834539 0.403953
+vn -0.229854 -0.896039 0.379843
+vn 0.417744 -0.575126 0.703364
+vn -0.442082 -0.684793 0.579329
+vn 0.694731 -0.419675 0.584142
+vn -0.689086 -0.423923 0.587750
+vn 0.553707 -0.297771 0.777651
+vn -0.766752 -0.256891 0.588301
+vn 0.822669 0.360622 0.439508
+vn -0.573765 -0.440072 0.690746
+vn 0.504141 0.644831 0.574486
+vn -0.505128 0.650645 0.567015
+vn 0.597716 0.556494 0.577105
+vn -0.630433 0.520792 0.575613
+vn -0.032791 0.655826 0.754200
+vn 0.048593 0.656005 0.753191
+vn -0.655169 0.326496 0.681289
+vn 0.710353 0.271548 0.649354
+vn -0.567735 0.555907 0.607161
+vn 0.601317 0.526152 0.601317
+vn 0.536408 -0.323041 0.779686
+vn -0.648351 -0.378710 0.660470
+vn 0.222645 -0.469360 0.854476
+vn -0.218052 -0.470992 0.854763
+vn -0.107349 -0.500959 0.858787
+vn 0.034841 -0.579236 0.814415
+vn -0.077015 -0.575864 0.813910
+vn 0.089902 -0.784316 0.613813
+vn 0.027886 -0.864453 0.501940
+vn -0.054668 -0.169470 0.984018
+vn 0.168675 -0.312751 0.934738
+vn -0.425985 -0.060855 0.902681
+vn 0.434968 -0.181237 0.882018
+vn -0.437362 -0.306154 0.845567
+vn 0.331076 -0.215200 0.918737
+vn -0.357888 -0.306761 0.881938
+vn 0.000000 -0.447214 0.894427
+vn -0.306946 0.211293 0.927976
+vn -0.159824 0.390339 0.906693
+vn 0.159824 0.390339 0.906693
+vn 0.185396 -0.495579 0.848545
+vn -0.334643 -0.185509 0.923905
+vn 0.058543 -0.078057 0.995229
+vn -0.386342 -0.044578 0.921278
+vn 0.057130 -0.231242 0.971217
+vn 0.006618 -0.231615 0.972785
+vn 0.100823 -0.710345 0.696595
+vn -0.020355 -0.783677 0.620835
+vn 0.132164 -0.594737 0.792982
+vn -0.207390 -0.518476 0.829561
+vn 0.314270 -0.392837 0.864242
+vn -0.175467 -0.363467 0.914934
+vn 0.328839 -0.035967 0.943701
+vn -0.281888 -0.044419 0.958419
+vn 0.323263 -0.080816 0.942852
+vn -0.359533 -0.089883 0.928793
+vn 0.023219 0.051082 0.998425
+vn -0.004435 -0.066518 0.997775
+vn 0.004339 -0.065079 0.997871
+vn 0.844653 -0.533465 0.044455
+vn -0.847337 -0.511933 -0.141223
+vn 0.963518 0.214115 -0.160586
+vn -0.949990 0.269164 -0.158332
+vn 0.101829 0.916461 -0.386950
+vn -0.070860 0.921175 -0.382642
+vn -0.722993 0.097702 0.683912
+vn 0.431934 -0.863868 0.259161
+vn -0.440225 -0.880451 0.176090
+vn -0.520719 0.615395 0.591726
+vn 0.632643 0.535313 0.559645
+vn 0.086206 0.775855 0.624994
+vn -0.089712 0.807410 0.583130
+vn 0.763885 0.297067 0.572914
+vn -0.766261 0.287348 0.574696
+vn 0.341604 -0.540874 0.768610
+vn -0.341604 -0.540874 0.768610
+vn 0.037450 0.224702 0.973708
+vn -0.040390 0.242338 0.969351
+vn 0.428571 -0.857143 0.285714
+vn 0.056293 -0.262700 0.963234
+vn -0.505913 0.071634 0.859605
+vn 0.505913 0.071634 0.859605
+vn 0.581914 -0.363696 0.727393
+vn 0.872872 -0.218218 0.436436
+vn 0.331914 0.073759 0.940422
+vn -0.729421 0.162094 0.664583
+vn 0.281546 0.066246 0.957258
+vn -0.332822 0.078311 0.939732
+vn 0.875254 0.205942 0.437627
+vn -0.791554 0.186248 0.582025
+vn 0.897301 0.199400 0.393815
+vn -0.877266 0.194948 0.438633
+vn 0.850547 0.379804 0.363756
+vn -0.893156 0.430173 0.131239
+vn 0.252426 -0.865462 0.432731
+vn -0.033615 -0.336146 0.941210
+vn -0.192450 -0.192450 0.962250
+vn 0.129641 -0.194461 0.972306
+vn -0.188144 -0.282216 0.940721
+vn 0.447214 0.000000 0.894427
+vn -0.065512 0.393073 0.917171
+vn -0.646159 0.758535 0.084282
+vn 0.646344 0.733687 0.209626
+vn 0.021652 -0.303133 0.952702
+vn -0.015962 -0.287311 0.957704
+vn -0.598986 -0.245040 0.762346
+vn 0.468122 -0.223885 0.854832
+vn -0.521444 0.052144 0.851691
+vn 0.271039 0.027104 0.962187
+vn -0.123882 0.049553 0.991059
+vn 0.171716 -0.009038 0.985105
+vn -0.548821 -0.329293 0.768350
+vn 0.433224 -0.487377 0.758143
+vn -0.159944 -0.879690 0.447842
+vn 0.159944 -0.879690 0.447842
+vn 0.389976 -0.589498 0.707398
+vn -0.418605 -0.581395 0.697674
+vn 0.654659 -0.458936 0.600666
+vn -0.591414 -0.511493 0.623382
+vn 0.537784 -0.114422 0.835282
+vn -0.544023 -0.077718 0.835463
+vn 0.577350 0.115470 0.808290
+vn -0.567152 0.110664 0.816145
+vn 0.521382 0.657395 0.544051
+vn -0.528094 0.215149 0.821479
+vn 0.179587 0.788189 0.588648
+vn -0.179587 0.788189 0.588648
+vn 0.188144 0.338659 0.921906
+vn -0.152410 0.335302 0.929701
+vn -0.012939 0.181147 0.983371
+vn 0.087030 0.275594 0.957326
+vn 0.082903 -0.290159 0.953381
+vn -0.280430 -0.218112 0.934765
+vn 0.301511 -0.301511 0.904534
+vn -0.266679 -0.304776 0.914327
+vn -0.182574 -0.912871 0.365148
+vn 0.376595 -0.833888 0.403494
+vn 0.045478 -0.750388 0.659432
+vn -0.082339 -0.782218 0.617540
+vn -0.320713 -0.267261 0.908688
+vn 0.370673 -0.285133 0.883912
+vn -0.230391 0.025599 0.972761
+vn 0.269181 -0.057682 0.961361
+vn -0.053239 0.359362 0.931678
+vn 0.279713 0.524463 0.804176
+vn -0.048679 0.681509 0.730189
+vn 0.021330 0.554574 0.831861
+vn 0.337822 0.522089 0.783134
+vn -0.350177 0.654679 0.669904
+vn 0.542520 -0.339075 0.768570
+vn -0.601445 -0.240578 0.761831
+vn 0.830474 -0.061517 0.553650
+vn -0.829185 -0.082918 0.552790
+vn 0.781404 0.111629 0.613960
+vn -0.779987 0.118180 0.614535
+vn -0.404311 0.855017 -0.324774
+vn 0.433796 0.888752 -0.148125
+vn -0.846507 0.372757 -0.380102
+vn 0.851538 0.374383 -0.367042
+vn -0.215621 0.888360 -0.405368
+vn 0.266352 0.871042 -0.412725
+vn 0.591352 0.748894 -0.299100
+vn -0.587871 0.747790 -0.308575
+vn 0.365308 0.883310 -0.293792
+vn -0.350238 0.876606 -0.329992
+vn 0.290082 0.914097 -0.283336
+vn -0.278943 0.918076 -0.281652
+vn 0.796447 0.132300 -0.590059
+vn -0.898143 0.067270 -0.434527
+vn 0.510781 -0.664871 -0.545023
+vn -0.452713 -0.728585 -0.514018
+vn 0.369484 -0.856639 -0.360071
+vn -0.440781 -0.819481 -0.366283
+vn 0.164909 -0.664414 -0.728944
+vn -0.368294 -0.677996 -0.636145
+vn 0.301108 -0.012546 -0.953508
+vn -0.171779 -0.022904 -0.984869
+vn 0.256245 -0.311155 -0.915162
+vn 0.064999 -0.357494 -0.931651
+vn 0.153296 -0.964861 -0.213412
+vn -0.058475 -0.977375 -0.203272
+vn 0.126029 -0.962407 -0.240602
+vn -0.101592 -0.965123 -0.241281
+vn 0.939565 0.157293 -0.304100
+vn -0.608216 -0.331400 -0.721282
+vn 0.927816 0.183840 -0.324592
+vn -0.920777 0.146009 -0.361734
+vn 0.219221 0.076621 -0.972662
+vn -0.087930 0.053124 -0.994709
+vn 0.199158 -0.322167 -0.925497
+vn -0.121066 -0.052967 -0.991230
+vn 0.370576 -0.677954 -0.634864
+vn -0.870302 -0.477813 -0.119453
+vn 0.920213 0.135518 -0.367211
+vn -0.920408 0.139456 -0.365241
+vn 0.945694 0.267261 -0.185027
+vn -0.924627 0.346735 -0.157607
+vn 0.933713 0.281311 -0.221458
+vn -0.907920 0.373419 -0.190370
+vn 0.950148 0.245544 -0.192165
+vn -0.991801 0.123975 0.030994
+vn 0.183497 -0.786416 -0.589812
+vn -0.079745 -0.797452 -0.598089
+vn 0.372685 -0.475901 -0.796633
+vn -0.373117 -0.470405 -0.799689
+vn 0.326270 -0.834200 -0.444588
+vn -0.330884 -0.814402 -0.476723
+vn 0.299535 -0.944220 -0.136844
+vn -0.265974 -0.954013 -0.138263
+vn 0.328655 -0.916251 -0.229063
+vn -0.284208 -0.930136 -0.232534
+vn 0.864191 -0.473705 0.169638
+vn -0.956962 0.257365 -0.134120
+vn 0.916562 -0.374043 0.141445
+vn -0.691649 -0.722163 0.010171
+vn 0.418903 -0.226512 -0.879325
+vn -0.436826 -0.042787 -0.898528
+vn 0.111918 0.962578 0.246815
+vn -0.112859 0.967467 0.226428
+vn 0.131962 0.975005 -0.178751
+vn -0.120926 0.976388 -0.179005
+vn 0.387800 0.619241 -0.682753
+vn -0.300033 0.640864 -0.706593
+vn 0.495100 0.861841 -0.110022
+vn -0.352190 0.932651 -0.078264
+vn 0.343166 0.696426 0.630260
+vn -0.256133 0.644711 0.720238
+vn 0.596551 0.788828 0.147905
+vn -0.625482 0.766875 0.143789
+vn 0.712453 0.675511 -0.189988
+vn -0.690128 0.696659 -0.195935
+vn 0.630409 0.251702 -0.734323
+vn -0.590457 0.174525 -0.787973
+vn 0.682297 0.231849 -0.693338
+vn -0.714499 0.426452 -0.554643
+vn 0.657395 0.725402 -0.204019
+vn -0.675140 0.723364 -0.144673
+vn 0.728932 0.672861 0.126161
+vn -0.738071 0.653580 0.167585
+vn 0.779118 0.407418 0.476430
+vn -0.776627 0.335766 0.533022
+vn 0.323790 0.943389 -0.071953
+vn -0.158041 0.950572 -0.267276
+vn 0.154817 0.508036 0.847308
+vn -0.156987 0.642722 0.749842
+vn -0.168134 0.100505 -0.980627
+vn 0.170233 0.109686 -0.979280
+vn 0.292531 0.567427 0.769709
+vn -0.041931 0.372966 0.926897
+vn 0.933951 0.225489 0.277291
+vn -0.498048 0.820648 -0.280152
+vn 0.927613 0.076242 0.365680
+vn -0.933361 0.235393 0.270976
+vn 0.974975 0.216855 0.048967
+vn -0.901926 0.379315 -0.206516
+vn 0.995589 0.089286 -0.028802
+vn -0.961699 0.146796 -0.231485
+vn 0.637407 -0.765079 0.091466
+vn -0.746041 -0.659560 0.091670
+vn 0.372004 -0.924373 0.084546
+vn -0.371878 -0.924382 0.085001
+vn 0.398590 -0.875437 0.273378
+vn -0.548020 -0.773958 0.317275
+vn 0.632788 -0.764224 0.124661
+vn -0.499284 -0.851720 0.159026
+vn 0.523608 -0.328992 -0.785875
+vn -0.570582 -0.344303 -0.745582
+vn 0.539638 -0.334289 -0.772685
+vn -0.562892 -0.263733 -0.783325
+vn 0.214362 -0.834108 -0.508244
+vn -0.105938 -0.916539 -0.385660
+vn 0.736521 -0.615372 -0.280809
+vn -0.697614 -0.647014 -0.307746
+vn 0.324443 0.486664 0.811107
+vn -0.480811 0.254547 0.839063
+vn 0.446708 0.097464 0.889355
+vn -0.410191 0.274828 0.869605
+vn 0.181659 -0.007898 0.983330
+vn -0.145938 0.091211 0.985080
+vn 0.292478 -0.075828 0.953261
+vn -0.283452 -0.103074 0.953431
+vn 0.584705 -0.219755 0.780915
+vn -0.505826 -0.246744 0.826594
+vn 0.595688 -0.384986 0.704941
+vn -0.613244 -0.208998 0.761743
+vn 0.613781 0.409187 0.675159
+vn -0.484318 0.558018 0.673833
+vn -0.269338 0.831434 0.485979
+vn 0.267527 0.831765 0.486412
+vn -0.800022 0.207413 0.562978
+vn 0.857614 0.222344 0.463747
+vn -0.522496 -0.356527 0.774523
+vn 0.525673 -0.357905 0.771733
+vn 0.438976 -0.525204 0.729014
+vn -0.486190 -0.519041 0.703005
+vn 0.710358 -0.456659 0.535587
+vn -0.688357 -0.473246 0.549730
+vn 0.630202 -0.765768 0.128239
+vn -0.996972 -0.037764 -0.067975
+vn -0.197104 0.314030 0.928728
+vn 0.178808 0.292337 0.939450
+vn 0.904186 -0.357840 -0.233235
+vn -0.887036 -0.383852 -0.256564
+vn 0.039984 0.339864 0.939624
+vn -0.039984 0.339864 0.939624
+vn 0.273408 0.906367 0.322097
+vn -0.137793 0.803793 0.578731
+vn 0.717741 0.168880 0.675521
+vn -0.606788 -0.606788 0.513436
+vn -0.102194 0.817553 0.566713
+vn 0.900782 -0.407496 0.150130
+vn -0.701334 -0.701334 -0.127515
+vn 0.581515 -0.521653 0.624274
+vn -0.457983 -0.441913 0.771339
+vn 0.613754 -0.257113 0.746458
+vn -0.715512 -0.415458 0.561638
+vn 0.171249 -0.093409 0.980790
+vn -0.827147 0.532322 -0.180171
+vn 0.871673 -0.444553 -0.206296
+vn -0.900500 -0.433574 -0.033352
+vn 0.689496 -0.664423 0.288334
+vn -0.772350 -0.573034 0.274059
+vn 0.792982 -0.594737 0.132164
+vn -0.797077 -0.597808 0.085401
+vn 0.240772 0.963087 -0.120386
+vn -0.242338 0.969351 0.040390
+vn 0.925132 0.346924 0.154189
+vn -0.931907 0.349465 0.097074
+vn 0.621336 -0.776671 0.103556
+vn 0.000000 1.000000 0.000000
+vn 0.619724 -0.689882 0.374173
+vn -0.661828 -0.649341 0.374620
+vn 0.275241 -0.880771 0.385337
+vn -0.296806 -0.871867 0.389557
+vn -0.822210 -0.562565 -0.086549
+vn 0.792930 -0.525187 -0.308934
+vn -0.816910 0.218382 -0.533823
+vn 0.809617 0.242885 -0.534347
+vn -0.483417 0.872662 -0.069060
+vn 0.562140 0.823134 -0.080306
+vn -0.109559 0.993857 -0.015651
+vn 0.007071 0.989925 0.141418
+vn 0.173777 0.009654 0.984738
+vn -0.137516 -0.027503 0.990118
+vn 0.413449 0.041345 0.909588
+vn -0.339983 -0.029999 0.939953
+vn 0.300945 0.092599 0.949135
+vn -0.382991 0.011264 0.923684
+vn 0.122027 0.045760 0.991471
+vn -0.180460 0.067672 0.981252
+vn -0.009916 0.386708 0.922149
+vn -0.328721 0.595807 0.732774
+vn 0.424421 -0.032032 0.904898
+vn -0.399963 -0.065300 0.914202
+vn 0.256989 0.072278 0.963708
+vn -0.361833 -0.058152 0.930427
+vn -0.041065 0.164260 0.985562
+vn -0.298142 0.745356 0.596285
+vn -0.421637 -0.527046 0.737865
+vn -0.538138 0.739940 0.403604
+vn -0.669312 0.180199 0.720798
+vn 0.472320 -0.198589 0.858764
+vn -0.443738 -0.214293 0.870158
+vn 0.297527 -0.406239 0.863972
+vn -0.493213 -0.104785 0.863575
+vn 0.500196 0.283348 0.818240
+vn -0.525068 0.302312 0.795557
+vn 0.092924 -0.991188 -0.094399
+vn -0.073694 -0.992789 -0.094551
+vn 0.468784 -0.871457 0.144241
+vn -0.585489 -0.790410 0.180150
+vn 0.926415 -0.245971 0.285051
+vn -0.934096 -0.244495 0.260168
+vn 0.826663 0.562687 -0.003473
+vn -0.832821 0.549401 -0.067585
+vn -0.191998 0.956991 -0.217498
+vn 0.251070 0.943898 -0.214522
+vn -0.355407 0.931910 -0.072321
+vn 0.484098 0.874267 -0.036127
+vn -0.521508 -0.019655 -0.853020
+vn 0.525631 -0.002993 -0.850708
+vn -0.113643 -0.054588 -0.992021
+vn 0.146646 0.010386 -0.989134
+vn -0.821852 0.563467 0.084053
+vn 0.807309 0.590114 0.004098
+vn 0.469239 -0.158527 -0.868726
+vn -0.419982 -0.229081 -0.878144
+vn -0.068684 -0.994282 -0.081767
+vn 0.068684 -0.994282 -0.081767
+s off
+f 47/1/1 1/2/1 3/3/1
+f 4/4/2 2/5/2 46/6/2
+f 45/7/3 3/3/3 5/8/3
+f 6/9/4 4/4/4 44/10/4
+f 3/11/5 9/12/5 7/13/5
+f 8/14/6 10/15/6 6/9/6
+f 1/2/7 11/16/7 9/17/7
+f 10/15/8 12/18/8 4/4/8
+f 11/19/9 13/20/9 9/21/9
+f 16/22/10 14/23/10 12/18/10
+f 9/21/11 15/24/11 7/25/11
+f 18/26/12 16/22/12 10/15/12
+f 15/24/13 21/27/13 19/28/13
+f 20/29/14 22/30/14 18/31/14
+f 13/20/15 23/32/15 21/27/15
+f 22/30/16 24/33/16 16/34/16
+f 23/35/17 25/36/17 21/37/17
+f 28/38/18 26/39/18 24/33/18
+f 21/37/19 27/40/19 29/41/19
+f 30/42/20 28/38/20 20/29/20
+f 27/40/21 33/43/21 31/44/21
+f 32/45/22 34/46/22 30/42/22
+f 25/47/23 35/48/23 33/49/23
+f 34/46/24 36/50/24 28/38/24
+f 35/48/25 37/51/25 33/49/25
+f 40/52/26 38/53/26 36/54/26
+f 33/49/27 39/55/27 31/56/27
+f 42/57/28 40/52/28 34/58/28
+f 39/55/29 45/7/29 41/59/29
+f 44/60/30 46/61/30 40/52/30
+f 37/51/31 47/1/31 39/55/31
+f 46/61/32 48/62/32 38/53/32
+f 47/63/33 37/64/33 49/65/33
+f 52/66/34 38/53/34 48/62/34
+f 37/64/35 35/67/35 51/68/35
+f 54/69/36 36/70/36 38/71/36
+f 35/72/37 25/36/37 55/73/37
+f 56/74/38 26/75/38 54/69/38
+f 25/36/39 23/35/39 57/76/39
+f 58/77/40 24/78/40 56/74/40
+f 23/79/41 13/80/41 57/81/41
+f 60/82/42 14/83/42 24/84/42
+f 13/80/43 11/85/43 59/86/43
+f 64/87/44 12/88/44 14/83/44
+f 11/89/45 1/90/45 65/91/45
+f 66/92/46 2/93/46 64/94/46
+f 1/90/47 47/95/47 49/96/47
+f 50/97/48 48/98/48 66/92/48
+f 61/99/49 65/100/49 49/101/49
+f 50/102/50 66/103/50 62/104/50
+f 63/105/51 65/100/51 61/99/51
+f 62/104/52 66/103/52 64/106/52
+f 61/99/53 59/107/53 63/105/53
+f 64/108/54 60/109/54 62/110/54
+f 61/99/55 57/111/55 59/107/55
+f 60/109/56 58/112/56 62/110/56
+f 61/99/57 55/113/57 57/111/57
+f 58/112/58 56/114/58 62/110/58
+f 61/99/59 53/115/59 55/113/59
+f 56/114/60 54/116/60 62/110/60
+f 61/99/61 51/117/61 53/115/61
+f 54/116/62 52/118/62 62/110/62
+f 61/99/63 49/101/63 51/117/63
+f 52/119/64 50/102/64 62/104/64
+f 89/120/65 174/121/65 91/122/65
+f 176/123/66 175/124/66 90/125/66
+f 87/126/67 172/127/67 89/120/67
+f 175/124/68 173/128/68 88/129/68
+f 85/130/69 170/131/69 172/132/69
+f 173/128/70 171/133/70 88/129/70
+f 83/134/71 168/135/71 170/131/71
+f 171/133/72 169/136/72 86/137/72
+f 81/138/73 166/139/73 168/135/73
+f 169/140/74 167/141/74 84/142/74
+f 79/143/75 92/144/75 146/145/75
+f 147/146/76 93/147/76 165/148/76
+f 92/149/77 94/150/77 146/151/77
+f 149/152/78 95/153/78 93/147/78
+f 94/154/79 96/155/79 150/156/79
+f 151/157/80 97/158/80 149/152/80
+f 96/155/81 98/159/81 150/156/81
+f 153/160/82 99/161/82 97/158/82
+f 98/159/83 100/162/83 152/163/83
+f 155/164/84 101/165/84 99/166/84
+f 100/162/85 102/167/85 154/168/85
+f 157/169/86 103/170/86 101/165/86
+f 102/167/87 104/171/87 158/172/87
+f 159/173/88 105/174/88 157/169/88
+f 104/171/89 106/175/89 160/176/89
+f 161/177/90 107/178/90 159/179/90
+f 106/180/91 108/181/91 162/182/91
+f 163/183/92 109/184/92 161/177/92
+f 108/181/93 67/185/93 68/186/93
+f 68/187/94 67/188/94 163/183/94
+f 110/189/95 128/190/95 162/191/95
+f 161/192/96 129/193/96 111/194/96
+f 128/190/97 179/195/97 158/172/97
+f 159/196/98 180/197/98 161/192/98
+f 126/198/99 156/199/99 179/200/99
+f 159/196/100 157/201/100 180/197/100
+f 124/202/101 154/203/101 126/198/101
+f 157/201/102 155/204/102 127/205/102
+f 122/206/103 152/207/103 124/202/103
+f 155/204/104 153/160/104 125/208/104
+f 120/209/105 150/156/105 122/210/105
+f 153/160/106 151/157/106 123/211/106
+f 118/212/107 148/213/107 120/209/107
+f 151/157/108 149/152/108 119/214/108
+f 116/215/109 146/216/109 148/213/109
+f 149/152/110 147/146/110 119/214/110
+f 114/217/111 164/218/111 146/216/111
+f 147/219/112 165/220/112 117/221/112
+f 114/217/113 181/222/113 177/223/113
+f 177/223/114 182/224/114 115/225/114
+f 110/189/115 162/191/115 112/226/115
+f 68/227/116 163/228/116 111/194/116
+f 112/226/117 68/229/117 178/230/117
+f 178/231/118 68/227/118 184/232/118
+f 177/223/119 181/222/119 183/233/119
+f 184/234/120 182/224/120 178/230/120
+f 135/235/121 137/236/121 176/123/121
+f 176/123/122 137/236/122 175/124/122
+f 133/237/123 135/235/123 174/121/123
+f 175/124/124 136/238/124 173/128/124
+f 131/239/125 133/240/125 170/131/125
+f 173/128/126 134/241/126 132/242/126
+f 166/139/127 187/243/127 185/244/127
+f 186/245/128 188/246/128 169/247/128
+f 131/239/129 170/131/129 168/135/129
+f 169/136/130 171/133/130 186/248/130
+f 144/249/131 190/250/131 187/243/131
+f 189/251/132 190/250/132 188/246/132
+f 185/244/133 187/243/133 189/251/133
+f 189/251/134 188/246/134 69/252/134
+f 130/253/135 131/239/135 69/252/135
+f 186/245/135 132/254/135 69/252/135
+f 142/255/136 193/256/136 191/257/136
+f 192/258/137 194/259/137 145/260/137
+f 140/261/138 195/262/138 142/263/138
+f 194/264/139 196/265/139 141/266/139
+f 139/267/140 197/268/140 140/261/140
+f 196/269/141 198/270/141 139/271/141
+f 138/272/142 71/273/142 197/274/142
+f 198/275/143 71/276/143 139/277/143
+f 190/278/144 144/279/144 70/280/144
+f 192/258/145 145/260/145 190/281/145
+f 70/282/146 191/283/146 208/284/146
+f 207/285/147 192/258/147 70/282/147
+f 71/273/148 199/286/148 197/274/148
+f 201/287/149 199/288/149 71/276/149
+f 197/289/150 200/290/150 202/291/150
+f 203/292/151 201/293/151 196/265/151
+f 195/294/152 202/291/152 193/295/152
+f 205/296/153 203/292/153 196/265/153
+f 193/256/154 204/297/154 206/298/154
+f 207/285/155 205/299/155 194/259/155
+f 199/300/156 204/301/156 200/290/156
+f 203/302/157 205/303/157 199/288/157
+f 199/304/158 208/284/158 204/305/158
+f 207/285/159 208/284/159 205/299/159
+f 139/306/160 140/307/160 164/308/160
+f 165/220/161 141/309/161 139/310/161
+f 140/307/162 142/311/162 164/308/162
+f 212/312/163 143/313/163 165/220/163
+f 142/314/164 144/249/164 211/315/164
+f 214/316/165 145/260/165 143/317/165
+f 144/249/166 187/243/166 213/318/166
+f 167/319/167 188/246/167 145/320/167
+f 81/138/168 209/321/168 166/139/168
+f 214/322/169 210/323/169 82/324/169
+f 209/321/170 215/325/170 213/318/170
+f 212/326/171 216/327/171 210/323/171
+f 79/328/172 164/329/172 211/315/172
+f 212/326/173 165/330/173 216/327/173
+f 131/331/174 130/332/174 222/333/174
+f 72/334/175 130/332/175 132/242/175
+f 133/237/176 131/331/176 220/335/176
+f 223/336/177 132/337/177 134/338/177
+f 135/235/178 133/237/178 218/339/178
+f 221/340/179 134/338/179 136/341/179
+f 137/342/180 135/343/180 217/344/180
+f 219/345/181 136/341/181 137/342/181
+f 217/346/182 218/347/182 229/348/182
+f 230/349/183 219/350/183 231/351/183
+f 218/347/184 220/352/184 229/348/184
+f 228/353/185 221/354/185 219/350/185
+f 220/352/186 222/355/186 227/356/186
+f 226/357/187 223/358/187 221/359/187
+f 222/360/188 72/361/188 225/362/188
+f 224/363/189 72/334/189 223/364/189
+f 224/365/190 231/366/190 229/367/190
+f 230/368/191 231/366/191 226/369/191
+f 225/370/192 229/367/192 227/371/192
+f 228/372/193 230/373/193 226/374/193
+f 183/375/194 181/376/194 232/377/194
+f 235/378/195 182/224/195 184/234/195
+f 112/379/196 183/375/196 254/380/196
+f 233/381/197 184/234/197 113/382/197
+f 110/189/198 112/226/198 254/383/198
+f 255/384/199 113/382/199 257/385/199
+f 181/376/200 114/386/200 252/387/200
+f 253/388/201 115/225/201 235/378/201
+f 114/386/202 116/389/202 250/390/202
+f 251/391/203 117/392/203 115/393/203
+f 116/215/204 118/212/204 248/394/204
+f 249/395/205 119/214/205 251/391/205
+f 118/212/206 120/209/206 246/396/206
+f 247/397/207 121/398/207 249/395/207
+f 120/209/208 122/210/208 244/399/208
+f 245/400/209 123/211/209 247/397/209
+f 122/210/210 124/401/210 244/399/210
+f 243/402/211 125/403/211 123/404/211
+f 124/401/212 126/405/212 242/406/212
+f 241/407/213 127/408/213 125/403/213
+f 126/405/214 179/195/214 236/409/214
+f 237/410/215 180/411/215 127/408/215
+f 179/195/216 128/190/216 238/412/216
+f 239/413/217 129/414/217 237/415/217
+f 128/190/218 110/189/218 238/412/218
+f 257/385/219 111/416/219 129/414/219
+f 238/412/220 256/417/220 258/418/220
+f 259/419/221 257/420/221 277/421/221
+f 236/409/222 238/412/222 276/422/222
+f 277/421/223 239/423/223 279/424/223
+f 240/425/224 236/426/224 278/427/224
+f 279/424/225 237/428/225 275/429/225
+f 242/430/226 240/425/226 274/431/226
+f 275/429/227 241/432/227 273/433/227
+f 244/434/228 242/430/228 270/435/228
+f 273/436/229 243/437/229 245/438/229
+f 246/439/230 244/434/230 270/435/230
+f 271/440/231 245/438/231 269/441/231
+f 248/394/232 246/396/232 266/442/232
+f 269/441/233 247/443/233 249/444/233
+f 250/445/234 248/394/234 264/446/234
+f 267/447/235 249/444/235 265/448/235
+f 252/449/236 250/445/236 262/450/236
+f 265/451/237 251/452/237 253/453/237
+f 234/454/238 252/449/238 262/450/238
+f 263/455/239 253/453/239 281/456/239
+f 256/417/240 254/383/240 260/457/240
+f 261/458/241 255/459/241 259/419/241
+f 254/383/242 232/460/242 282/461/242
+f 283/462/243 233/463/243 261/458/243
+f 232/460/244 234/454/244 280/464/244
+f 281/456/245 235/465/245 283/466/245
+f 67/185/246 108/181/246 73/467/246
+f 285/468/247 109/469/247 67/470/247
+f 108/181/248 106/180/248 284/471/248
+f 287/472/249 107/473/249 109/469/249
+f 106/474/250 104/475/250 288/476/250
+f 289/477/251 105/478/251 287/472/251
+f 104/475/252 102/479/252 288/476/252
+f 291/480/253 103/170/253 105/174/253
+f 102/479/254 100/481/254 290/482/254
+f 293/483/255 101/165/255 103/170/255
+f 100/481/256 98/484/256 294/485/256
+f 295/486/257 99/166/257 293/483/257
+f 98/484/258 96/487/258 294/485/258
+f 297/488/259 97/489/259 99/490/259
+f 96/491/260 94/492/260 298/493/260
+f 299/494/261 95/495/261 297/488/261
+f 94/492/262 92/144/262 300/496/262
+f 301/497/263 93/498/263 299/494/263
+f 308/499/264 309/500/264 338/501/264
+f 329/502/265 309/503/265 308/504/265
+f 307/505/266 308/504/266 336/506/266
+f 339/507/267 308/504/267 307/505/267
+f 306/508/268 307/505/268 340/509/268
+f 337/510/269 307/505/269 306/508/269
+f 89/511/270 91/512/270 306/513/270
+f 306/514/271 91/122/271 341/515/271
+f 87/516/272 89/511/272 340/517/272
+f 341/518/273 90/519/273 335/520/273
+f 85/521/274 87/516/274 334/522/274
+f 335/523/275 88/524/275 331/525/275
+f 83/526/276 85/527/276 330/528/276
+f 331/529/277 86/530/277 333/531/277
+f 330/532/278 336/506/278 338/533/278
+f 339/507/279 337/510/279 333/534/279
+f 330/532/280 334/535/280 340/509/280
+f 341/536/281 335/523/281 337/510/281
+f 326/537/282 332/538/282 328/539/282
+f 339/507/283 333/534/283 327/540/283
+f 81/541/284 83/526/284 332/542/284
+f 333/531/285 84/142/285 327/543/285
+f 209/544/286 342/545/286 215/546/286
+f 345/547/287 343/548/287 210/323/287
+f 81/541/288 326/549/288 209/544/288
+f 343/548/289 327/543/289 82/324/289
+f 79/550/290 215/546/290 346/551/290
+f 345/547/291 216/327/291 80/552/291
+f 79/143/292 346/553/292 92/144/292
+f 301/497/293 347/554/293 80/555/293
+f 77/556/294 324/557/294 304/558/294
+f 353/559/295 325/560/295 77/561/295
+f 304/558/296 352/562/296 78/563/296
+f 351/564/297 353/559/297 304/565/297
+f 78/563/298 350/566/298 348/567/298
+f 349/568/299 351/569/299 305/570/299
+f 305/571/300 348/567/300 328/539/300
+f 329/572/301 349/568/301 309/573/301
+f 326/537/302 328/539/302 342/574/302
+f 349/575/303 329/576/303 327/543/303
+f 296/577/304 298/493/304 318/578/304
+f 319/579/305 299/580/305 311/581/305
+f 76/582/306 316/583/306 77/561/306
+f 325/560/307 317/584/307 76/582/307
+f 302/585/308 358/586/308 303/587/308
+f 357/588/309 359/589/309 302/590/309
+f 303/587/310 356/591/310 354/592/310
+f 355/593/311 357/594/311 75/595/311
+f 75/595/312 354/592/312 316/596/312
+f 317/584/313 355/597/313 76/582/313
+f 292/598/314 294/485/314 362/599/314
+f 363/600/315 295/486/315 365/601/315
+f 364/602/316 362/603/316 366/604/316
+f 369/605/317 363/600/317 365/601/317
+f 366/606/318 368/607/318 370/608/318
+f 371/609/319 369/605/319 373/610/319
+f 372/611/320 370/608/320 376/612/320
+f 377/613/321 371/609/321 375/614/321
+f 314/615/322 378/616/322 376/612/322
+f 375/617/323 379/618/323 315/619/323
+f 316/596/324 354/592/324 374/620/324
+f 375/617/325 355/597/325 379/618/325
+f 354/592/326 356/591/326 372/611/326
+f 373/610/327 357/588/327 375/614/327
+f 356/591/328 358/586/328 366/606/328
+f 367/621/329 359/589/329 373/610/329
+f 358/622/330 360/623/330 364/602/330
+f 365/601/331 361/624/331 367/621/331
+f 290/482/332 292/598/332 360/625/332
+f 365/601/333 293/483/333 291/480/333
+f 74/626/334 360/623/334 302/627/334
+f 359/628/335 361/629/335 74/626/335
+f 284/630/336 286/631/336 288/632/336
+f 289/633/337 287/634/337 291/635/337
+f 284/636/338 290/637/338 360/638/338
+f 361/624/339 291/480/339 74/639/339
+f 73/640/340 284/641/340 74/642/340
+f 74/642/341 285/643/341 73/640/341
+f 294/485/342 296/644/342 362/599/342
+f 311/645/343 297/646/343 295/486/343
+f 310/647/344 312/648/344 368/649/344
+f 369/605/345 313/650/345 363/600/345
+f 312/651/346 382/652/346 370/608/346
+f 371/609/347 383/653/347 369/605/347
+f 314/654/348 376/655/348 382/656/348
+f 371/609/349 377/613/349 315/657/349
+f 348/567/350 350/566/350 384/658/350
+f 387/659/351 351/569/351 349/568/351
+f 318/578/352 384/658/352 320/660/352
+f 387/659/353 385/661/353 319/579/353
+f 298/493/354 300/496/354 384/658/354
+f 385/661/355 301/662/355 319/579/355
+f 300/496/356 344/663/356 342/574/356
+f 343/664/357 345/665/357 385/661/357
+f 342/574/358 348/567/358 384/658/358
+f 385/661/359 349/568/359 343/664/359
+f 300/666/360 346/667/360 344/668/360
+f 345/665/361 347/669/361 301/662/361
+f 314/670/362 322/671/362 378/672/362
+f 381/673/363 323/674/363 315/619/363
+f 316/675/364 378/672/364 324/557/364
+f 381/673/365 379/618/365 317/584/365
+f 320/660/366 386/676/366 322/671/366
+f 381/673/367 387/677/367 321/678/367
+f 350/566/368 352/562/368 386/676/368
+f 381/673/369 353/559/369 351/564/369
+f 324/557/370 380/679/370 352/562/370
+f 353/559/371 381/673/371 325/560/371
+f 400/680/372 388/681/372 402/682/372
+f 415/683/373 389/684/373 401/685/373
+f 400/680/374 402/682/374 404/686/374
+f 405/687/375 403/688/375 399/689/375
+f 398/690/376 404/686/376 396/691/376
+f 407/692/377 405/693/377 399/694/377
+f 396/691/378 406/695/378 394/696/378
+f 409/697/379 407/692/379 397/698/379
+f 394/696/380 408/699/380 392/700/380
+f 411/701/381 409/702/381 395/703/381
+f 392/700/382 410/704/382 412/705/382
+f 413/706/383 411/701/383 391/707/383
+f 410/704/384 420/708/384 412/705/384
+f 419/709/385 421/710/385 411/711/385
+f 408/712/386 422/713/386 410/714/386
+f 421/715/387 423/716/387 409/697/387
+f 406/717/388 424/718/388 422/713/388
+f 423/716/389 425/719/389 409/697/389
+f 404/720/390 426/721/390 424/722/390
+f 425/719/391 427/723/391 407/692/391
+f 402/682/392 428/724/392 404/686/392
+f 427/725/393 429/726/393 403/727/393
+f 402/682/394 414/728/394 416/729/394
+f 417/730/395 415/731/395 429/726/395
+f 318/578/396 320/660/396 442/732/396
+f 445/733/397 321/734/397 319/579/397
+f 320/735/398 390/736/398 412/705/398
+f 413/737/399 391/738/399 445/739/399
+f 310/740/400 318/578/400 442/732/400
+f 443/741/401 319/742/401 313/743/401
+f 382/744/402 430/745/402 414/728/402
+f 415/683/403 431/746/403 383/747/403
+f 412/748/404 418/749/404 440/750/404
+f 441/751/405 419/709/405 445/752/405
+f 438/753/406 446/754/406 440/755/406
+f 445/756/407 447/757/407 439/758/407
+f 434/759/408 446/754/408 438/753/408
+f 439/760/409 447/761/409 437/762/409
+f 432/763/410 448/764/410 434/765/410
+f 447/766/411 449/767/411 433/768/411
+f 430/745/412 448/769/412 450/770/412
+f 433/768/413 449/767/413 431/771/413
+f 414/728/414 430/745/414 416/729/414
+f 451/772/415 431/771/415 415/731/415
+f 312/773/416 448/764/416 382/774/416
+f 431/775/417 449/776/417 313/650/417
+f 312/773/418 442/732/418 448/764/418
+f 447/766/419 443/777/419 313/778/419
+f 442/732/420 444/779/420 446/780/420
+f 447/781/421 445/782/421 443/783/421
+f 416/784/422 450/785/422 452/786/422
+f 453/787/423 451/772/423 477/788/423
+f 450/785/424 432/763/424 452/786/424
+f 463/789/425 433/768/425 451/772/425
+f 432/763/426 434/765/426 460/790/426
+f 461/791/427 435/792/427 463/789/427
+f 434/793/428 436/794/428 460/795/428
+f 459/796/429 437/762/429 435/797/429
+f 436/798/430 438/753/430 458/799/430
+f 457/800/431 439/760/431 437/762/431
+f 438/801/432 440/802/432 454/803/432
+f 455/804/433 441/805/433 457/806/433
+f 440/750/434 418/749/434 474/807/434
+f 475/808/435 419/809/435 441/810/435
+f 428/811/436 416/784/436 476/812/436
+f 477/788/437 417/730/437 465/813/437
+f 426/814/438 428/811/438 464/815/438
+f 465/813/439 429/726/439 467/816/439
+f 424/817/440 426/818/440 468/819/440
+f 467/820/441 427/821/441 425/822/441
+f 422/823/442 424/817/442 468/819/442
+f 469/824/443 425/825/443 471/826/443
+f 420/827/444 422/713/444 470/828/444
+f 471/826/445 423/829/445 473/830/445
+f 418/749/446 420/831/446 474/807/446
+f 473/830/447 421/832/447 475/808/447
+f 458/799/448 456/833/448 478/834/448
+f 481/835/449 457/836/449 459/837/449
+f 478/834/450 480/838/450 484/839/450
+f 483/840/451 481/835/451 479/841/451
+f 484/839/452 482/842/452 488/843/452
+f 489/844/453 483/840/453 487/845/453
+f 486/846/454 488/843/454 492/847/454
+f 491/848/455 489/844/455 487/845/455
+f 464/849/456 476/850/456 486/846/456
+f 487/845/457 477/851/457 493/852/457
+f 452/853/458 484/839/458 476/850/458
+f 487/854/459 485/855/459 453/787/459
+f 452/853/460 462/856/460 484/839/460
+f 479/841/461 463/857/461 453/858/461
+f 458/799/462 478/834/462 462/856/462
+f 463/857/463 479/841/463 461/859/463
+f 454/860/464 474/861/464 456/862/464
+f 481/835/465 475/863/465 455/864/465
+f 472/865/466 482/842/466 474/866/466
+f 481/867/467 483/868/467 473/869/467
+f 470/870/468 488/843/468 472/865/468
+f 483/868/469 489/871/469 471/872/469
+f 468/873/470 490/874/470 470/870/470
+f 489/871/471 491/875/471 469/876/471
+f 466/877/472 492/847/472 490/874/472
+f 491/878/473 493/879/473 469/880/473
+f 464/849/474 492/847/474 466/877/474
+f 467/881/475 493/879/475 465/149/475
+f 392/882/476 390/883/476 504/884/476
+f 505/885/477 391/707/477 503/886/477
+f 394/887/478 392/882/478 502/888/478
+f 503/886/479 393/889/479 501/890/479
+f 396/891/480 394/887/480 498/892/480
+f 501/890/481 395/703/481 397/893/481
+f 398/894/482 396/895/482 496/896/482
+f 499/897/483 397/898/483 399/899/483
+f 400/900/484 398/894/484 496/896/484
+f 497/901/485 399/902/485 495/903/485
+f 388/904/486 400/905/486 494/906/486
+f 495/903/487 401/907/487 507/908/487
+f 494/909/488 502/910/488 504/629/488
+f 505/911/489 503/912/489 507/908/489
+f 494/909/490 496/913/490 502/910/490
+f 501/914/491 497/915/491 495/916/491
+f 496/896/492 498/917/492 500/918/492
+f 501/914/493 499/919/493 497/915/493
+f 314/920/494 382/921/494 388/904/494
+f 389/922/495 383/923/495 507/908/495
+f 314/670/496 506/924/496 322/671/496
+f 505/925/497 507/926/497 315/619/497
+f 320/927/498 322/928/498 504/929/498
+f 505/930/499 323/931/499 321/932/499
+f 45/7/500 47/1/500 3/3/500
+f 2/5/501 48/933/501 46/6/501
+f 43/934/502 45/7/502 5/8/502
+f 4/4/503 46/6/503 44/10/503
+f 5/935/504 3/11/504 7/13/504
+f 10/15/505 4/4/505 6/9/505
+f 3/3/506 1/2/506 9/17/506
+f 12/18/507 2/5/507 4/4/507
+f 13/20/508 15/24/508 9/21/508
+f 10/15/509 16/22/509 12/18/509
+f 15/24/510 17/936/510 7/25/510
+f 8/14/511 18/26/511 10/15/511
+f 17/936/512 15/24/512 19/28/512
+f 22/30/513 16/34/513 18/31/513
+f 15/24/514 13/20/514 21/27/514
+f 24/33/515 14/937/515 16/34/515
+f 25/36/516 27/40/516 21/37/516
+f 22/30/517 28/38/517 24/33/517
+f 19/938/518 21/37/518 29/41/518
+f 28/38/519 22/30/519 20/29/519
+f 29/41/520 27/40/520 31/44/520
+f 34/46/521 28/38/521 30/42/521
+f 27/939/522 25/47/522 33/49/522
+f 36/50/523 26/39/523 28/38/523
+f 37/51/524 39/55/524 33/49/524
+f 34/58/525 40/52/525 36/54/525
+f 39/55/526 41/59/526 31/56/526
+f 32/940/527 42/57/527 34/58/527
+f 45/7/528 43/934/528 41/59/528
+f 42/57/529 44/60/529 40/52/529
+f 47/1/530 45/7/530 39/55/530
+f 40/52/531 46/61/531 38/53/531
+f 37/64/532 51/68/532 49/65/532
+f 50/941/533 52/66/533 48/62/533
+f 35/67/534 53/942/534 51/68/534
+f 52/943/535 54/69/535 38/71/535
+f 53/944/536 35/72/536 55/73/536
+f 26/75/537 36/70/537 54/69/537
+f 55/73/538 25/36/538 57/76/538
+f 24/78/539 26/75/539 56/74/539
+f 13/80/540 59/86/540 57/81/540
+f 58/945/541 60/82/541 24/84/541
+f 11/85/542 63/946/542 59/86/542
+f 60/82/543 64/87/543 14/83/543
+f 63/947/544 11/89/544 65/91/544
+f 2/93/545 12/948/545 64/94/545
+f 65/91/546 1/90/546 49/96/546
+f 48/98/547 2/93/547 66/92/547
+f 174/121/548 176/123/548 91/122/548
+f 91/122/549 176/123/549 90/125/549
+f 172/127/550 174/121/550 89/120/550
+f 90/125/551 175/124/551 88/129/551
+f 87/949/552 85/130/552 172/132/552
+f 171/133/553 86/137/553 88/129/553
+f 85/130/554 83/134/554 170/131/554
+f 169/136/555 84/950/555 86/137/555
+f 83/134/556 81/138/556 168/135/556
+f 167/141/557 82/324/557 84/142/557
+f 164/951/558 79/143/558 146/145/558
+f 93/147/559 80/952/559 165/148/559
+f 94/150/560 148/953/560 146/151/560
+f 147/146/561 149/152/561 93/147/561
+f 148/213/562 94/154/562 150/156/562
+f 97/158/563 95/153/563 149/152/563
+f 98/159/564 152/163/564 150/156/564
+f 151/157/565 153/160/565 97/158/565
+f 100/162/566 154/168/566 152/163/566
+f 153/954/567 155/164/567 99/166/567
+f 102/167/568 156/955/568 154/168/568
+f 155/164/569 157/169/569 101/165/569
+f 156/955/570 102/167/570 158/172/570
+f 105/174/571 103/170/571 157/169/571
+f 158/172/572 104/171/572 160/176/572
+f 107/178/573 105/956/573 159/179/573
+f 160/957/574 106/180/574 162/182/574
+f 109/184/575 107/178/575 161/177/575
+f 162/182/576 108/181/576 68/186/576
+f 67/188/577 109/184/577 163/183/577
+f 128/190/578 160/176/578 162/191/578
+f 163/228/579 161/192/579 111/194/579
+f 160/176/580 128/190/580 158/172/580
+f 180/197/581 129/193/581 161/192/581
+f 156/199/582 158/958/582 179/200/582
+f 157/201/583 127/205/583 180/197/583
+f 154/203/584 156/199/584 126/198/584
+f 155/204/585 125/208/585 127/205/585
+f 152/207/586 154/203/586 124/202/586
+f 153/160/587 123/211/587 125/208/587
+f 150/156/588 152/163/588 122/210/588
+f 151/157/589 121/398/589 123/211/589
+f 148/213/590 150/156/590 120/209/590
+f 121/398/591 151/157/591 119/214/591
+f 118/212/592 116/215/592 148/213/592
+f 147/146/593 117/392/593 119/214/593
+f 116/215/594 114/217/594 146/216/594
+f 165/220/595 115/225/595 117/221/595
+f 164/218/596 114/217/596 177/223/596
+f 165/220/597 177/223/597 115/225/597
+f 162/191/598 68/229/598 112/226/598
+f 113/959/599 68/227/599 111/194/599
+f 183/233/600 112/226/600 178/230/600
+f 68/227/601 113/959/601 184/232/601
+f 178/230/602 177/223/602 183/233/602
+f 182/224/603 177/223/603 178/230/603
+f 174/121/604 135/235/604 176/123/604
+f 137/236/605 136/238/605 175/124/605
+f 172/127/606 133/237/606 174/121/606
+f 136/238/607 134/241/607 173/128/607
+f 133/240/608 172/132/608 170/131/608
+f 171/133/609 173/128/609 132/242/609
+f 168/135/610 166/139/610 185/244/610
+f 188/246/611 167/319/611 169/247/611
+f 185/244/612 131/239/612 168/135/612
+f 171/133/613 132/242/613 186/248/613
+f 190/250/132 189/251/132 187/243/132
+f 190/250/614 145/320/614 188/246/614
+f 69/252/615 185/244/615 189/251/615
+f 188/246/616 186/245/616 69/252/616
+f 131/239/135 185/244/135 69/252/135
+f 132/254/135 130/253/135 69/252/135
+f 144/279/617 142/255/617 191/257/617
+f 194/259/618 143/317/618 145/260/618
+f 195/262/619 193/960/619 142/263/619
+f 143/961/620 194/264/620 141/266/620
+f 197/268/621 195/262/621 140/261/621
+f 141/962/622 196/269/622 139/271/622
+f 139/963/623 138/272/623 197/274/623
+f 71/276/187 138/964/187 139/277/187
+f 144/279/624 191/257/624 70/280/624
+f 70/282/625 192/258/625 190/281/625
+f 191/283/146 206/965/146 208/284/146
+f 208/284/147 207/285/147 70/282/147
+f 199/286/626 200/966/626 197/274/626
+f 198/275/627 201/287/627 71/276/627
+f 195/294/628 197/289/628 202/291/628
+f 201/293/629 198/967/629 196/265/629
+f 202/291/630 204/301/630 193/295/630
+f 194/264/631 205/296/631 196/265/631
+f 191/257/632 193/256/632 206/298/632
+f 192/258/633 207/285/633 194/259/633
+f 204/301/634 202/291/634 200/290/634
+f 201/287/635 203/302/635 199/288/635
+f 208/284/636 206/965/636 204/305/636
+f 208/284/637 199/304/637 205/299/637
+f 177/968/638 139/306/638 164/308/638
+f 177/223/639 165/220/639 139/310/639
+f 142/311/640 211/969/640 164/308/640
+f 143/313/641 141/309/641 165/220/641
+f 144/249/642 213/318/642 211/315/642
+f 212/970/643 214/316/643 143/317/643
+f 187/243/644 166/139/644 213/318/644
+f 214/971/645 167/319/645 145/320/645
+f 209/321/646 213/318/646 166/139/646
+f 167/141/647 214/322/647 82/324/647
+f 215/325/648 211/315/648 213/318/648
+f 214/322/649 212/326/649 210/323/649
+f 215/325/650 79/328/650 211/315/650
+f 165/330/651 80/552/651 216/327/651
+f 130/332/652 72/334/652 222/333/652
+f 223/364/653 72/334/653 132/242/653
+f 131/331/654 222/333/654 220/335/654
+f 221/340/655 223/336/655 134/338/655
+f 133/237/656 220/335/656 218/339/656
+f 219/345/657 221/340/657 136/341/657
+f 135/343/658 218/972/658 217/344/658
+f 217/344/135 219/345/135 137/342/135
+f 231/973/182 217/346/182 229/348/182
+f 219/350/183 217/974/183 231/351/183
+f 220/352/659 227/356/659 229/348/659
+f 230/349/660 228/353/660 219/350/660
+f 222/355/186 225/975/186 227/356/186
+f 228/976/187 226/357/187 221/359/187
+f 72/361/188 224/977/188 225/362/188
+f 226/978/189 224/363/189 223/364/189
+f 225/370/661 224/365/661 229/367/661
+f 231/366/662 224/365/662 226/369/662
+f 181/376/663 234/979/663 232/377/663
+f 233/381/664 235/378/664 184/234/664
+f 183/375/665 232/377/665 254/380/665
+f 255/384/666 233/381/666 113/382/666
+f 256/417/667 110/189/667 254/383/667
+f 113/382/668 111/416/668 257/385/668
+f 234/979/669 181/376/669 252/387/669
+f 115/225/670 182/224/670 235/378/670
+f 252/387/671 114/386/671 250/390/671
+f 253/980/672 251/391/672 115/393/672
+f 250/445/673 116/215/673 248/394/673
+f 119/214/674 117/392/674 251/391/674
+f 248/394/675 118/212/675 246/396/675
+f 121/398/676 119/214/676 249/395/676
+f 246/396/677 120/209/677 244/399/677
+f 123/211/678 121/398/678 247/397/678
+f 124/401/679 242/406/679 244/399/679
+f 245/981/680 243/402/680 123/404/680
+f 126/405/681 240/982/681 242/406/681
+f 243/402/682 241/407/682 125/403/682
+f 240/982/683 126/405/683 236/409/683
+f 241/407/684 237/410/684 127/408/684
+f 236/409/685 179/195/685 238/412/685
+f 129/414/686 180/983/686 237/415/686
+f 110/189/687 256/417/687 238/412/687
+f 239/413/688 257/385/688 129/414/688
+f 276/422/689 238/412/689 258/418/689
+f 257/420/690 239/423/690 277/421/690
+f 278/984/691 236/409/691 276/422/691
+f 239/423/692 237/428/692 279/424/692
+f 274/431/693 240/425/693 278/427/693
+f 237/428/694 241/432/694 275/429/694
+f 272/985/695 242/430/695 274/431/695
+f 241/432/696 243/986/696 273/433/696
+f 242/430/697 272/985/697 270/435/697
+f 271/440/698 273/436/698 245/438/698
+f 268/987/699 246/439/699 270/435/699
+f 245/438/700 247/443/700 269/441/700
+f 246/396/701 268/988/701 266/442/701
+f 267/447/702 269/441/702 249/444/702
+f 248/394/703 266/442/703 264/446/703
+f 249/444/704 251/989/704 265/448/704
+f 250/445/705 264/446/705 262/450/705
+f 263/455/706 265/451/706 253/453/706
+f 280/464/238 234/454/238 262/450/238
+f 253/453/239 235/465/239 281/456/239
+f 258/418/707 256/417/707 260/457/707
+f 255/459/708 257/420/708 259/419/708
+f 260/457/709 254/383/709 282/461/709
+f 233/463/710 255/459/710 261/458/710
+f 282/461/711 232/460/711 280/464/711
+f 235/465/712 233/990/712 283/466/712
+f 108/181/713 284/471/713 73/467/713
+f 73/991/714 285/468/714 67/470/714
+f 106/180/715 286/992/715 284/471/715
+f 285/468/716 287/472/716 109/469/716
+f 286/993/717 106/474/717 288/476/717
+f 105/478/718 107/473/718 287/472/718
+f 102/479/719 290/482/719 288/476/719
+f 289/994/720 291/480/720 105/174/720
+f 100/481/721 292/598/721 290/482/721
+f 291/480/722 293/483/722 103/170/722
+f 292/598/723 100/481/723 294/485/723
+f 99/166/724 101/165/724 293/483/724
+f 96/487/725 296/644/725 294/485/725
+f 295/995/726 297/488/726 99/490/726
+f 296/577/727 96/491/727 298/493/727
+f 95/495/728 97/489/728 297/488/728
+f 298/493/729 94/492/729 300/496/729
+f 93/498/730 95/495/730 299/494/730
+f 309/500/731 328/539/731 338/501/731
+f 339/507/732 329/502/732 308/504/732
+f 308/504/733 338/533/733 336/506/733
+f 337/510/734 339/507/734 307/505/734
+f 307/505/735 336/506/735 340/509/735
+f 341/536/736 337/510/736 306/508/736
+f 340/517/737 89/511/737 306/513/737
+f 91/122/738 90/125/738 341/515/738
+f 334/522/739 87/516/739 340/517/739
+f 90/519/740 88/996/740 335/520/740
+f 330/997/741 85/521/741 334/522/741
+f 88/524/742 86/998/742 331/525/742
+f 332/542/743 83/526/743 330/528/743
+f 86/530/744 84/142/744 333/531/744
+f 332/999/745 330/532/745 338/533/745
+f 337/510/746 331/525/746 333/534/746
+f 336/506/747 330/532/747 340/509/747
+f 335/523/748 331/525/748 337/510/748
+f 332/538/749 338/501/749 328/539/749
+f 329/502/750 339/507/750 327/540/750
+f 326/549/751 81/541/751 332/542/751
+f 84/142/752 82/324/752 327/543/752
+f 342/545/753 344/1000/753 215/546/753
+f 216/327/754 345/547/754 210/323/754
+f 326/549/755 342/545/755 209/544/755
+f 210/323/756 343/548/756 82/324/756
+f 215/546/757 344/1000/757 346/551/757
+f 347/1001/758 345/547/758 80/552/758
+f 346/553/759 300/496/759 92/144/759
+f 93/498/760 301/497/760 80/555/760
+f 324/557/761 352/562/761 304/558/761
+f 304/565/762 353/559/762 77/561/762
+f 352/562/763 350/566/763 78/563/763
+f 78/1002/764 351/564/764 304/565/764
+f 305/571/765 78/563/765 348/567/765
+f 351/569/766 78/1003/766 305/570/766
+f 309/500/767 305/571/767 328/539/767
+f 349/568/768 305/570/768 309/573/768
+f 328/539/769 348/567/769 342/574/769
+f 343/548/770 349/575/770 327/543/770
+f 310/740/771 296/577/771 318/578/771
+f 299/580/772 297/1004/772 311/581/772
+f 316/583/773 324/1005/773 77/561/773
+f 77/561/774 325/560/774 76/582/774
+f 358/586/775 356/591/775 303/587/775
+f 303/1006/776 357/588/776 302/590/776
+f 75/595/777 303/587/777 354/592/777
+f 357/594/778 303/587/778 75/595/778
+f 76/1007/779 75/595/779 316/596/779
+f 355/597/780 75/1008/780 76/582/780
+f 364/1009/781 292/598/781 362/599/781
+f 295/486/782 293/483/782 365/601/782
+f 362/603/783 368/649/783 366/604/783
+f 367/621/784 369/605/784 365/601/784
+f 372/611/785 366/606/785 370/608/785
+f 369/605/786 367/621/786 373/610/786
+f 374/620/787 372/611/787 376/612/787
+f 371/609/788 373/610/788 375/614/788
+f 378/616/789 374/620/789 376/612/789
+f 377/1010/790 375/617/790 315/619/790
+f 378/616/791 316/596/791 374/620/791
+f 355/597/792 317/584/792 379/618/792
+f 374/620/793 354/592/793 372/611/793
+f 357/588/794 355/1011/794 375/614/794
+f 372/611/795 356/591/795 366/606/795
+f 359/589/796 357/588/796 373/610/796
+f 366/604/797 358/622/797 364/602/797
+f 361/624/798 359/589/798 367/621/798
+f 292/598/799 364/1009/799 360/625/799
+f 361/624/800 365/601/800 291/480/800
+f 360/623/801 358/622/801 302/627/801
+f 302/627/802 359/628/802 74/626/802
+f 290/1012/803 284/630/803 288/632/803
+f 287/634/804 285/1013/804 291/635/804
+f 74/1014/805 284/636/805 360/638/805
+f 291/480/806 285/1015/806 74/639/806
+f 296/644/807 310/1016/807 362/599/807
+f 363/600/808 311/645/808 295/486/808
+f 362/603/809 310/647/809 368/649/809
+f 313/650/810 311/645/810 363/600/810
+f 368/607/811 312/651/811 370/608/811
+f 383/653/812 313/650/812 369/605/812
+f 376/655/813 370/1017/813 382/656/813
+f 383/653/814 371/609/814 315/657/814
+f 350/566/815 386/676/815 384/658/815
+f 385/661/816 387/659/816 349/568/816
+f 384/658/817 386/676/817 320/660/817
+f 321/734/818 387/659/818 319/579/818
+f 318/578/819 298/493/819 384/658/819
+f 301/662/820 299/580/820 319/579/820
+f 384/658/821 300/496/821 342/574/821
+f 345/665/822 301/662/822 385/661/822
+f 322/671/823 380/679/823 378/672/823
+f 379/618/824 381/673/824 315/619/824
+f 378/672/825 380/679/825 324/557/825
+f 325/560/826 381/673/826 317/584/826
+f 386/676/827 380/679/827 322/671/827
+f 323/674/828 381/673/828 321/678/828
+f 352/562/829 380/679/829 386/676/829
+f 387/677/830 381/673/830 351/564/830
+f 388/681/831 414/728/831 402/682/831
+f 403/1018/832 415/683/832 401/685/832
+f 398/690/833 400/680/833 404/686/833
+f 403/688/834 401/1019/834 399/689/834
+f 404/686/835 406/695/835 396/691/835
+f 397/698/836 407/692/836 399/694/836
+f 406/695/837 408/699/837 394/696/837
+f 395/1020/838 409/697/838 397/698/838
+f 408/699/839 410/704/839 392/700/839
+f 393/889/840 411/701/840 395/703/840
+f 390/736/841 392/700/841 412/705/841
+f 411/701/842 393/889/842 391/707/842
+f 420/708/843 418/1021/843 412/705/843
+f 413/1022/844 419/709/844 411/711/844
+f 422/713/845 420/827/845 410/714/845
+f 411/1023/846 421/715/846 409/697/846
+f 408/712/847 406/717/847 422/713/847
+f 425/719/848 407/692/848 409/697/848
+f 406/1024/849 404/720/849 424/722/849
+f 427/723/850 405/693/850 407/692/850
+f 428/724/851 426/1025/851 404/686/851
+f 405/1026/852 427/725/852 403/727/852
+f 428/724/853 402/682/853 416/729/853
+f 415/731/854 403/727/854 429/726/854
+f 320/660/855 444/779/855 442/732/855
+f 443/1027/856 445/733/856 319/579/856
+f 444/1028/857 320/735/857 412/705/857
+f 391/738/858 321/1029/858 445/739/858
+f 312/773/859 310/740/859 442/732/859
+f 319/742/860 311/1030/860 313/743/860
+f 388/681/861 382/744/861 414/728/861
+f 389/684/862 415/683/862 383/747/862
+f 444/1031/863 412/748/863 440/750/863
+f 419/709/864 413/1022/864 445/752/864
+f 446/754/865 444/1032/865 440/755/865
+f 441/805/866 445/756/866 439/758/866
+f 436/798/135 434/759/135 438/753/135
+f 447/761/867 435/797/867 437/762/867
+f 448/764/868 446/780/868 434/765/868
+f 435/792/869 447/766/869 433/768/869
+f 448/769/870 432/1033/870 450/770/870
+f 451/772/871 433/768/871 431/771/871
+f 430/745/872 450/770/872 416/729/872
+f 417/730/873 451/772/873 415/731/873
+f 448/764/874 430/1034/874 382/774/874
+f 383/653/875 431/775/875 313/650/875
+f 442/732/876 446/780/876 448/764/876
+f 449/767/877 447/766/877 313/778/877
+f 476/812/878 416/784/878 452/786/878
+f 451/772/879 417/730/879 477/788/879
+f 432/763/880 462/1035/880 452/786/880
+f 453/787/881 463/789/881 451/772/881
+f 462/1035/426 432/763/426 460/790/426
+f 435/792/427 433/768/427 463/789/427
+f 436/794/882 458/1036/882 460/795/882
+f 461/1037/883 459/796/883 435/797/883
+f 438/753/884 456/833/884 458/799/884
+f 459/796/885 457/800/885 437/762/885
+f 456/1038/886 438/801/886 454/803/886
+f 441/805/427 439/758/427 457/806/427
+f 454/1039/887 440/750/887 474/807/887
+f 455/1040/887 475/808/887 441/810/887
+f 464/815/888 428/811/888 476/812/888
+f 417/730/889 429/726/889 465/813/889
+f 466/1041/890 426/814/890 464/815/890
+f 429/726/891 427/725/891 467/816/891
+f 426/818/892 466/1042/892 468/819/892
+f 469/1043/893 467/820/893 425/822/893
+f 470/1044/894 422/823/894 468/819/894
+f 425/825/895 423/829/895 471/826/895
+f 472/1045/896 420/827/896 470/828/896
+f 423/829/897 421/832/897 473/830/897
+f 420/831/898 472/1046/898 474/807/898
+f 421/832/899 419/809/899 475/808/899
+f 456/833/900 480/838/900 478/834/900
+f 479/841/901 481/835/901 459/837/901
+f 480/838/902 482/842/902 484/839/902
+f 485/1047/903 483/840/903 479/841/903
+f 486/846/904 484/839/904 488/843/904
+f 483/840/905 485/1047/905 487/845/905
+f 488/843/906 490/874/906 492/847/906
+f 493/852/907 491/848/907 487/845/907
+f 492/847/908 464/849/908 486/846/908
+f 477/851/909 465/1048/909 493/852/909
+f 484/839/910 486/846/910 476/850/910
+f 477/788/911 487/854/911 453/787/911
+f 462/856/912 478/834/912 484/839/912
+f 485/1047/913 479/841/913 453/858/913
+f 460/1049/135 458/799/135 462/856/135
+f 479/841/914 459/837/914 461/859/914
+f 474/861/915 480/1050/915 456/862/915
+f 457/836/916 481/835/916 455/864/916
+f 482/842/917 480/838/917 474/866/917
+f 475/1051/918 481/867/918 473/869/918
+f 488/843/919 482/842/919 472/865/919
+f 473/869/920 483/868/920 471/872/920
+f 490/874/921 488/843/921 470/870/921
+f 471/872/922 489/871/922 469/876/922
+f 468/873/923 466/877/923 490/874/923
+f 493/879/924 467/881/924 469/880/924
+f 502/888/925 392/882/925 504/884/925
+f 391/707/926 393/889/926 503/886/926
+f 500/1052/927 394/887/927 502/888/927
+f 393/889/928 395/703/928 501/890/928
+f 394/887/929 500/1052/929 498/892/929
+f 499/1053/930 501/890/930 397/893/930
+f 396/895/931 498/917/931 496/896/931
+f 497/1054/932 499/897/932 399/899/932
+f 494/1055/933 400/900/933 496/896/933
+f 399/902/934 401/907/934 495/903/934
+f 506/1056/935 388/904/935 494/906/935
+f 401/907/936 389/922/936 507/908/936
+f 506/1057/937 494/909/937 504/629/937
+f 503/912/938 495/903/938 507/908/938
+f 496/913/939 500/1058/939 502/910/939
+f 503/1059/940 501/914/940 495/916/940
+f 506/1056/941 314/920/941 388/904/941
+f 383/923/942 315/1060/942 507/908/942
+f 506/924/943 504/1061/943 322/671/943
+f 323/674/944 505/925/944 315/619/944
+f 390/1062/945 320/927/945 504/929/945
+f 391/1063/946 505/930/946 321/932/946
diff --git a/src/datavis3d/engine/meshes/apeSmooth.obj b/src/datavis3d/engine/meshes/apeSmooth.obj
new file mode 100644
index 00000000..a27f0360
--- /dev/null
+++ b/src/datavis3d/engine/meshes/apeSmooth.obj
@@ -0,0 +1,3049 @@
+# Blender v2.66 (sub 0) OBJ File: 'cylinder.blend'
+# www.blender.org
+o Suzanne
+v -2.122357 0.164062 -1.198706
+v -2.997357 0.164062 -1.198706
+v -2.059857 0.093750 -1.276831
+v -3.059857 0.093750 -1.276831
+v -2.012982 0.054687 -1.386206
+v -3.106732 0.054687 -1.386206
+v -2.208294 -0.023438 -1.347144
+v -2.911419 -0.023438 -1.347144
+v -2.208294 0.031250 -1.245581
+v -2.911419 0.031250 -1.245581
+v -2.208294 0.132812 -1.183081
+v -2.911419 0.132812 -1.183081
+v -2.286419 0.164062 -1.167456
+v -2.833294 0.164062 -1.167456
+v -2.356732 0.093750 -1.222144
+v -2.762982 0.093750 -1.222144
+v -2.403607 0.054687 -1.315894
+v -2.716107 0.054687 -1.315894
+v -2.481732 0.242187 -1.308081
+v -2.637982 0.242187 -1.308081
+v -2.419232 0.242187 -1.222144
+v -2.700482 0.242187 -1.222144
+v -2.317669 0.242187 -1.167456
+v -2.802044 0.242187 -1.167456
+v -2.286419 0.328125 -1.167456
+v -2.833294 0.328125 -1.167456
+v -2.356732 0.390625 -1.222144
+v -2.762982 0.390625 -1.222144
+v -2.403607 0.437500 -1.315894
+v -2.716107 0.437500 -1.315894
+v -2.208294 0.515625 -1.347144
+v -2.911419 0.515625 -1.347144
+v -2.208294 0.453125 -1.245581
+v -2.911419 0.453125 -1.245581
+v -2.208294 0.359375 -1.183081
+v -2.911419 0.359375 -1.183081
+v -2.122357 0.328125 -1.198706
+v -2.997357 0.328125 -1.198706
+v -2.059857 0.390625 -1.276831
+v -3.059857 0.390625 -1.276831
+v -2.012982 0.437500 -1.386206
+v -3.106732 0.437500 -1.386206
+v -1.934857 0.242187 -1.401831
+v -3.184857 0.242187 -1.401831
+v -1.997357 0.242187 -1.292456
+v -3.122357 0.242187 -1.292456
+v -2.091107 0.242187 -1.206519
+v -3.028607 0.242187 -1.206519
+v -2.083294 0.242187 -1.190894
+v -3.036419 0.242187 -1.190894
+v -2.114544 0.335937 -1.183081
+v -3.005169 0.335937 -1.183081
+v -2.208294 0.375000 -1.159644
+v -2.911419 0.375000 -1.159644
+v -2.294232 0.335937 -1.144019
+v -2.825482 0.335937 -1.144019
+v -2.333294 0.242187 -1.144019
+v -2.786419 0.242187 -1.144019
+v -2.294232 0.156250 -1.144019
+v -2.825482 0.156250 -1.144019
+v -2.208294 0.242187 -1.136206
+v -2.911419 0.242187 -1.136206
+v -2.208294 0.117187 -1.159644
+v -2.911419 0.117187 -1.159644
+v -2.114544 0.156250 -1.183081
+v -3.005169 0.156250 -1.183081
+v -2.559857 0.429687 -1.222144
+v -2.559857 0.351562 -1.144019
+v -2.559857 -0.679688 -1.229956
+v -2.559857 -0.320313 -1.183081
+v -2.559857 -0.187500 -1.167456
+v -2.559857 -0.773438 -1.245581
+v -2.559857 0.406250 -1.362769
+v -2.559857 0.570312 -1.394019
+v -2.559857 0.898438 -2.511206
+v -2.559857 0.562500 -2.815894
+v -2.559857 0.070313 -2.792456
+v -2.559857 -0.382812 -2.315894
+v -2.356732 -0.187500 -1.401831
+v -2.762982 -0.187500 -1.401831
+v -2.247357 -0.437500 -1.394019
+v -2.872357 -0.437500 -1.394019
+v -2.208294 -0.695312 -1.394019
+v -2.911419 -0.695312 -1.394019
+v -2.192669 -0.890625 -1.433081
+v -2.927044 -0.890625 -1.433081
+v -2.231732 -0.945312 -1.440894
+v -2.887982 -0.945312 -1.440894
+v -2.380169 -0.968750 -1.409644
+v -2.739544 -0.968750 -1.409644
+v -2.559857 -0.984375 -1.386206
+v -2.122357 -0.140625 -1.433081
+v -2.997357 -0.140625 -1.433081
+v -1.927044 -0.039063 -1.425269
+v -3.192669 -0.039063 -1.425269
+v -1.731732 0.148437 -1.519019
+v -3.387982 0.148437 -1.519019
+v -1.700482 0.429687 -1.370581
+v -3.419232 0.429687 -1.370581
+v -1.848919 0.484375 -1.339331
+v -3.270794 0.484375 -1.339331
+v -2.067669 0.601562 -1.276831
+v -3.052044 0.601562 -1.276831
+v -2.239544 0.757812 -1.229956
+v -2.880169 0.757812 -1.229956
+v -2.403607 0.718750 -1.206519
+v -2.716107 0.718750 -1.206519
+v -2.497357 0.492187 -1.214331
+v -2.622357 0.492187 -1.214331
+v -2.395794 0.414062 -1.190894
+v -2.723919 0.414062 -1.190894
+v -2.434857 0.304687 -1.198706
+v -2.684857 0.304687 -1.198706
+v -2.356732 0.093750 -1.222144
+v -2.762982 0.093750 -1.222144
+v -2.184857 0.015625 -1.261206
+v -2.934857 0.015625 -1.261206
+v -2.067669 0.062500 -1.292456
+v -3.052044 0.062500 -1.292456
+v -1.934857 0.187500 -1.315894
+v -3.184857 0.187500 -1.315894
+v -1.919232 0.296875 -1.315894
+v -3.200482 0.296875 -1.315894
+v -1.958294 0.375000 -1.300269
+v -3.161419 0.375000 -1.300269
+v -2.130169 0.437500 -1.245581
+v -2.989544 0.437500 -1.245581
+v -2.309857 0.468750 -1.206519
+v -2.809857 0.468750 -1.206519
+v -2.559857 -0.765625 -1.229956
+v -2.450482 -0.718750 -1.229956
+v -2.669232 -0.718750 -1.229956
+v -2.442669 -0.835938 -1.253394
+v -2.677044 -0.835938 -1.253394
+v -2.497357 -0.882813 -1.269019
+v -2.622357 -0.882813 -1.269019
+v -2.559857 -0.890625 -1.276831
+v -2.559857 -0.195313 -1.214331
+v -2.559857 -0.140625 -1.222144
+v -2.458294 -0.148438 -1.222144
+v -2.661419 -0.148438 -1.222144
+v -2.434857 -0.226563 -1.214331
+v -2.684857 -0.226563 -1.214331
+v -2.473919 -0.289063 -1.222144
+v -2.645794 -0.289063 -1.222144
+v -2.161419 -0.046875 -1.292456
+v -2.958294 -0.046875 -1.292456
+v -1.942669 0.054687 -1.339331
+v -3.177044 0.054687 -1.339331
+v -1.833294 0.203125 -1.362769
+v -3.286419 0.203125 -1.362769
+v -1.817669 0.375000 -1.308081
+v -3.302044 0.375000 -1.308081
+v -1.872357 0.414062 -1.237769
+v -3.247357 0.414062 -1.237769
+v -2.122357 0.546875 -1.167456
+v -2.997357 0.546875 -1.167456
+v -2.247357 0.640625 -1.128394
+v -2.872357 0.640625 -1.128394
+v -2.356732 0.617187 -1.112769
+v -2.762982 0.617187 -1.112769
+v -2.458294 0.429687 -1.120581
+v -2.661419 0.429687 -1.120581
+v -2.434857 -0.101563 -1.151831
+v -2.684857 -0.101563 -1.151831
+v -2.348919 -0.445313 -1.253394
+v -2.770794 -0.445313 -1.253394
+v -2.309857 -0.703125 -1.276831
+v -2.809857 -0.703125 -1.276831
+v -2.294232 -0.820312 -1.300269
+v -2.825482 -0.820312 -1.300269
+v -2.325482 -0.914062 -1.331519
+v -2.794232 -0.914062 -1.331519
+v -2.395794 -0.929688 -1.331519
+v -2.723919 -0.929688 -1.331519
+v -2.559857 -0.945312 -1.323706
+v -2.559857 0.046875 -1.237769
+v -2.559857 0.210937 -1.198706
+v -2.231732 0.476562 -1.222144
+v -2.887982 0.476562 -1.222144
+v -2.395794 0.140625 -1.214331
+v -2.723919 0.140625 -1.214331
+v -2.427044 0.210937 -1.206519
+v -2.692669 0.210937 -1.206519
+v -2.442669 -0.687500 -1.229956
+v -2.677044 -0.687500 -1.229956
+v -2.481732 -0.445313 -1.214331
+v -2.637982 -0.445313 -1.214331
+v -2.559857 -0.445313 -1.214331
+v -2.559857 -0.328125 -1.222144
+v -2.466107 -0.273438 -1.183081
+v -2.653607 -0.273438 -1.183081
+v -2.427044 -0.226563 -1.167456
+v -2.692669 -0.226563 -1.167456
+v -2.450482 -0.132813 -1.183081
+v -2.669232 -0.132813 -1.183081
+v -2.520794 -0.125000 -1.183081
+v -2.598919 -0.125000 -1.183081
+v -2.559857 -0.203125 -1.136206
+v -2.512982 -0.148438 -1.151831
+v -2.606732 -0.148438 -1.151831
+v -2.466107 -0.156250 -1.151831
+v -2.653607 -0.156250 -1.151831
+v -2.450482 -0.226563 -1.136206
+v -2.669232 -0.226563 -1.136206
+v -2.481732 -0.250000 -1.159644
+v -2.637982 -0.250000 -1.159644
+v -2.559857 -0.289063 -1.159644
+v -2.302044 -0.312500 -1.409644
+v -2.817669 -0.312500 -1.409644
+v -2.395794 -0.242188 -1.253394
+v -2.723919 -0.242188 -1.253394
+v -2.380169 -0.312500 -1.253394
+v -2.739544 -0.312500 -1.253394
+v -2.325482 -0.250000 -1.409644
+v -2.794232 -0.250000 -1.409644
+v -2.559857 -0.875000 -1.276831
+v -2.512982 -0.867188 -1.276831
+v -2.606732 -0.867188 -1.276831
+v -2.466107 -0.820313 -1.253394
+v -2.653607 -0.820313 -1.253394
+v -2.466107 -0.742188 -1.237769
+v -2.653607 -0.742188 -1.237769
+v -2.559857 -0.781250 -1.308081
+v -2.466107 -0.750000 -1.300269
+v -2.653607 -0.750000 -1.300269
+v -2.466107 -0.812500 -1.323706
+v -2.653607 -0.812500 -1.323706
+v -2.512982 -0.851562 -1.331519
+v -2.606732 -0.851562 -1.331519
+v -2.559857 -0.859375 -1.331519
+v -2.387982 0.218750 -1.183081
+v -2.731732 0.218750 -1.183081
+v -2.372357 0.156250 -1.190894
+v -2.747357 0.156250 -1.190894
+v -2.223919 0.429687 -1.206519
+v -2.895794 0.429687 -1.206519
+v -2.286419 0.421875 -1.190894
+v -2.833294 0.421875 -1.190894
+v -2.137982 0.398437 -1.190894
+v -2.981732 0.398437 -1.190894
+v -1.997357 0.351562 -1.269019
+v -3.122357 0.351562 -1.269019
+v -1.973919 0.289062 -1.276831
+v -3.145794 0.289062 -1.276831
+v -1.981732 0.195312 -1.284644
+v -3.137982 0.195312 -1.284644
+v -2.083294 0.101562 -1.245581
+v -3.036419 0.101562 -1.245581
+v -2.184857 0.062500 -1.222144
+v -2.934857 0.062500 -1.222144
+v -2.333294 0.109375 -1.183081
+v -2.786419 0.109375 -1.183081
+v -2.380169 0.296875 -1.183081
+v -2.739544 0.296875 -1.183081
+v -2.348919 0.375000 -1.183081
+v -2.770794 0.375000 -1.183081
+v -2.325482 0.359375 -1.206519
+v -2.794232 0.359375 -1.206519
+v -2.364544 0.296875 -1.206519
+v -2.755169 0.296875 -1.206519
+v -2.317669 0.125000 -1.206519
+v -2.802044 0.125000 -1.206519
+v -2.184857 0.085937 -1.237769
+v -2.934857 0.085937 -1.237769
+v -2.098919 0.117187 -1.261206
+v -3.020794 0.117187 -1.261206
+v -2.012982 0.210937 -1.292456
+v -3.106732 0.210937 -1.292456
+v -2.005169 0.281250 -1.292456
+v -3.114544 0.281250 -1.292456
+v -2.028607 0.335937 -1.284644
+v -3.091107 0.335937 -1.284644
+v -2.145794 0.390625 -1.214331
+v -2.973919 0.390625 -1.214331
+v -2.278607 0.398437 -1.198706
+v -2.841107 0.398437 -1.198706
+v -2.223919 0.406250 -1.214331
+v -2.895794 0.406250 -1.214331
+v -2.356732 0.171875 -1.214331
+v -2.762982 0.171875 -1.214331
+v -2.364544 0.226562 -1.214331
+v -2.755169 0.226562 -1.214331
+v -2.450482 0.460937 -1.354956
+v -2.669232 0.460937 -1.354956
+v -2.364544 0.664062 -1.347144
+v -2.755169 0.664062 -1.347144
+v -2.223919 0.687500 -1.370581
+v -2.895794 0.687500 -1.370581
+v -2.075482 0.554688 -1.409644
+v -3.044232 0.554688 -1.409644
+v -1.880169 0.453125 -1.472144
+v -3.239544 0.453125 -1.472144
+v -1.762982 0.406250 -1.503394
+v -3.356732 0.406250 -1.503394
+v -1.786419 0.164062 -1.589331
+v -3.333294 0.164062 -1.589331
+v -1.958294 -0.000000 -1.550269
+v -3.161419 -0.000000 -1.550269
+v -2.122357 -0.093750 -1.495581
+v -2.997357 -0.093750 -1.495581
+v -2.559857 0.898438 -1.675269
+v -2.559857 0.984375 -2.042456
+v -2.559857 -0.195312 -2.636206
+v -2.559857 -0.460938 -1.776831
+v -2.559857 -0.976562 -1.503394
+v -2.559857 -0.804688 -1.620581
+v -2.559857 -0.570312 -1.644019
+v -2.559857 -0.484375 -1.683081
+v -1.708294 0.234375 -1.909644
+v -3.411419 0.234375 -1.909644
+v -1.700482 0.320312 -2.011206
+v -3.419232 0.320312 -2.011206
+v -1.786419 0.265625 -2.401831
+v -3.333294 0.265625 -2.401831
+v -2.098919 0.437500 -2.667456
+v -3.020794 0.437500 -2.667456
+v -1.825482 -0.046875 -1.894019
+v -3.294232 -0.046875 -1.894019
+v -1.966107 -0.125000 -2.128394
+v -3.153607 -0.125000 -2.128394
+v -1.919232 -0.007812 -2.394019
+v -3.200482 -0.007812 -2.394019
+v -2.223919 0.054688 -2.628394
+v -2.895794 0.054688 -2.628394
+v -2.325482 -0.351563 -1.558081
+v -2.794232 -0.351563 -1.558081
+v -2.380169 -0.414062 -1.706519
+v -2.739544 -0.414062 -1.706519
+v -2.270794 -0.710938 -1.581519
+v -2.848919 -0.710938 -1.581519
+v -2.309857 -0.500000 -1.573706
+v -2.809857 -0.500000 -1.573706
+v -2.231732 -0.914062 -1.565894
+v -2.887982 -0.914062 -1.565894
+v -2.419232 -0.757812 -1.597144
+v -2.700482 -0.757812 -1.597144
+v -2.434857 -0.539062 -1.604956
+v -2.684857 -0.539062 -1.604956
+v -2.395794 -0.945312 -1.526831
+v -2.723919 -0.945312 -1.526831
+v -2.341107 -0.281250 -1.534644
+v -2.778607 -0.281250 -1.534644
+v -2.348919 -0.226563 -1.495581
+v -2.770794 -0.226563 -1.495581
+v -2.356732 -0.171875 -1.464331
+v -2.762982 -0.171875 -1.464331
+v -2.348919 -0.390625 -1.800269
+v -2.770794 -0.390625 -1.800269
+v -2.262982 -0.312500 -2.229956
+v -2.856732 -0.312500 -2.229956
+v -2.216107 -0.148437 -2.503394
+v -2.903607 -0.148437 -2.503394
+v -2.106732 0.867188 -2.347144
+v -3.012982 0.867188 -2.347144
+v -2.106732 0.929688 -2.034644
+v -3.012982 0.929688 -2.034644
+v -2.106732 0.851562 -1.729956
+v -3.012982 0.851562 -1.729956
+v -2.098919 0.523438 -1.534644
+v -3.020794 0.523438 -1.534644
+v -1.833294 0.406250 -1.628394
+v -3.286419 0.406250 -1.628394
+v -1.927044 0.453125 -1.683081
+v -3.192669 0.453125 -1.683081
+v -1.919232 0.703125 -1.909644
+v -3.200482 0.703125 -1.909644
+v -1.762982 0.562500 -1.839331
+v -3.356732 0.562500 -1.839331
+v -1.762982 0.617188 -2.081519
+v -3.356732 0.617188 -2.081519
+v -1.919232 0.750000 -2.159644
+v -3.200482 0.750000 -2.159644
+v -1.919232 0.679688 -2.409644
+v -3.200482 0.679688 -2.409644
+v -1.762982 0.539062 -2.323706
+v -3.356732 0.539062 -2.323706
+v -1.942669 0.328125 -2.550269
+v -3.177044 0.328125 -2.550269
+v -2.075482 0.023438 -2.511206
+v -3.044232 0.023438 -2.511206
+v -1.739544 0.328125 -2.167456
+v -3.380169 0.328125 -2.167456
+v -2.153607 -0.171875 -1.815894
+v -2.966107 -0.171875 -1.815894
+v -2.130169 -0.195312 -2.175269
+v -2.989544 -0.195312 -2.175269
+v -1.669232 0.406250 -2.198706
+v -3.450482 0.406250 -2.198706
+v -1.786419 -0.140625 -2.089331
+v -3.333294 -0.140625 -2.089331
+v -1.520794 -0.101562 -2.292456
+v -3.598919 -0.101562 -2.292456
+v -1.278607 0.054688 -2.394019
+v -3.841107 0.054688 -2.394019
+v -1.208294 0.320313 -2.386206
+v -3.911419 0.320313 -2.386206
+v -1.325482 0.507812 -2.386206
+v -3.794232 0.507812 -2.386206
+v -1.536419 0.476562 -2.276831
+v -3.583294 0.476562 -2.276831
+v -1.544232 0.414062 -2.253394
+v -3.575482 0.414062 -2.253394
+v -1.372357 0.437500 -2.354956
+v -3.747357 0.437500 -2.354956
+v -1.294232 0.289063 -2.370581
+v -3.825482 0.289063 -2.370581
+v -1.348919 0.078125 -2.370581
+v -3.770794 0.078125 -2.370581
+v -1.528607 -0.039062 -2.269019
+v -3.591107 -0.039062 -2.269019
+v -1.731732 -0.070312 -2.097144
+v -3.387982 -0.070312 -2.097144
+v -1.637982 0.359375 -2.183081
+v -3.481732 0.359375 -2.183081
+v -1.614544 0.304688 -2.253394
+v -3.505169 0.304688 -2.253394
+v -1.677044 -0.023437 -2.175269
+v -3.442669 -0.023437 -2.175269
+v -1.520794 0.000000 -2.331519
+v -3.598919 0.000000 -2.331519
+v -1.372357 0.093750 -2.409644
+v -3.747357 0.093750 -2.409644
+v -1.325482 0.250000 -2.409644
+v -3.794232 0.250000 -2.409644
+v -1.387982 0.359375 -2.401831
+v -3.731732 0.359375 -2.401831
+v -1.536419 0.343750 -2.323706
+v -3.583294 0.343750 -2.323706
+v -1.716107 0.289062 -2.175269
+v -3.403607 0.289062 -2.175269
+v -1.723919 0.171875 -2.237769
+v -3.395794 0.171875 -2.237769
+v -1.802044 0.093750 -2.237769
+v -3.317669 0.093750 -2.237769
+v -1.739544 0.085938 -2.237769
+v -3.380169 0.085938 -2.237769
+v -1.716107 0.015625 -2.237769
+v -3.403607 0.015625 -2.237769
+v -1.747357 -0.015625 -2.237769
+v -3.372357 -0.015625 -2.237769
+v -1.833294 -0.000000 -2.034644
+v -3.286419 -0.000000 -2.034644
+v -1.841107 -0.023438 -2.136206
+v -3.278607 -0.023438 -2.136206
+v -1.841107 0.039062 -2.151831
+v -3.278607 0.039062 -2.151831
+v -1.762982 0.203125 -2.175269
+v -3.356732 0.203125 -2.175269
+v -1.669232 0.242188 -2.229956
+v -3.450482 0.242188 -2.229956
+v -1.669232 0.234375 -2.284644
+v -3.450482 0.234375 -2.284644
+v -1.747357 -0.015625 -2.284644
+v -3.372357 -0.015625 -2.284644
+v -1.708294 0.015625 -2.284644
+v -3.411419 0.015625 -2.284644
+v -1.731732 0.078125 -2.284644
+v -3.387982 0.078125 -2.284644
+v -1.794232 0.093750 -2.284644
+v -3.325482 0.093750 -2.284644
+v -1.716107 0.171875 -2.284644
+v -3.403607 0.171875 -2.284644
+v -1.520794 0.328125 -2.378394
+v -3.598919 0.328125 -2.378394
+v -1.372357 0.343750 -2.448706
+v -3.747357 0.343750 -2.448706
+v -1.302044 0.242188 -2.456519
+v -3.817669 0.242188 -2.456519
+v -1.348919 0.085938 -2.448706
+v -3.770794 0.085938 -2.448706
+v -1.512982 0.000000 -2.386206
+v -3.606732 0.000000 -2.386206
+v -1.677044 -0.015625 -2.229956
+v -3.442669 -0.015625 -2.229956
+v -1.606732 0.289063 -2.308081
+v -3.512982 0.289063 -2.308081
+v -1.669232 0.109375 -2.292456
+v -3.450482 0.109375 -2.292456
+v -1.622357 0.062500 -2.300269
+v -3.497357 0.062500 -2.300269
+v -1.559857 0.125000 -2.331519
+v -3.559857 0.125000 -2.331519
+v -1.598919 0.171875 -2.315894
+v -3.520794 0.171875 -2.315894
+v -1.544232 0.234375 -2.339331
+v -3.575482 0.234375 -2.339331
+v -1.505169 0.187500 -2.347144
+v -3.614544 0.187500 -2.347144
+v -1.450482 0.210938 -2.354956
+v -3.669232 0.210938 -2.354956
+v -1.473919 0.273438 -2.354956
+v -3.645794 0.273438 -2.354956
+v -1.536419 0.437500 -2.448706
+v -3.583294 0.437500 -2.448706
+v -1.309857 0.468750 -2.511206
+v -3.809857 0.468750 -2.511206
+v -1.192669 0.296875 -2.464331
+v -3.927044 0.296875 -2.464331
+v -1.247357 0.054688 -2.495581
+v -3.872357 0.054688 -2.495581
+v -1.520794 -0.085937 -2.456519
+v -3.598919 -0.085937 -2.456519
+v -1.770794 -0.125000 -2.292456
+v -3.348919 -0.125000 -2.292456
+v -1.700482 0.382813 -2.347144
+v -3.419232 0.382813 -2.347144
+vt 0.472248 0.856582
+vt 0.458792 0.842677
+vt 0.473546 0.821180
+vt 0.715056 0.859528
+vt 0.689237 0.869892
+vt 0.698417 0.831391
+vt 0.499792 0.847299
+vt 0.491595 0.807822
+vt 0.742167 0.847902
+vt 0.720353 0.812741
+vt 0.890362 0.004822
+vt 0.890736 0.040402
+vt 0.867965 0.046959
+vt 0.742113 0.898476
+vt 0.715154 0.898340
+vt 0.438114 0.844174
+vt 0.436615 0.821937
+vt 0.689074 0.891767
+vt 0.938581 0.894186
+vt 0.941563 0.874834
+vt 0.959029 0.911658
+vt 0.699270 0.924815
+vt 0.680318 0.906024
+vt 0.965641 0.874676
+vt 0.983123 0.923752
+vt 0.721709 0.933724
+vt 0.960219 0.841459
+vt 0.983641 0.833564
+vt 0.148158 0.878633
+vt 0.127860 0.868828
+vt 0.148191 0.834010
+vt 0.938529 0.857649
+vt 0.102328 0.859165
+vt 0.127211 0.833008
+vt 0.956527 0.713480
+vt 0.955862 0.693038
+vt 0.973764 0.727209
+vt 0.102988 0.897722
+vt 0.088936 0.876166
+vt 0.972236 0.690651
+vt 0.996505 0.686870
+vt 0.116957 0.917456
+vt 0.971586 0.656836
+vt 0.995712 0.643127
+vt 0.073449 0.925971
+vt 0.069639 0.904851
+vt 0.438230 0.893993
+vt 0.457433 0.893241
+vt 0.472588 0.913302
+vt 0.071806 0.879803
+vt 0.472782 0.878208
+vt 0.265788 0.881660
+vt 0.287626 0.881086
+vt 0.291869 0.900041
+vt 0.498860 0.885474
+vt 0.489553 0.926445
+vt 0.237588 0.881292
+vt 0.273786 0.916009
+vt 0.524237 0.890727
+vt 0.239693 0.833859
+vt 0.266449 0.845077
+vt 0.288399 0.860675
+vt 0.534113 0.808440
+vt 0.530149 0.826352
+vt 0.530146 0.807822
+vt 0.290806 0.881557
+vt 0.534061 0.847446
+vt 0.525661 0.826794
+vt 0.946839 0.040241
+vt 0.953472 0.039583
+vt 0.961912 0.055521
+vt 0.956270 0.675474
+vt 0.950832 0.693246
+vt 0.946647 0.017594
+vt 0.952506 0.019351
+vt 0.951779 0.716275
+vt 0.956929 0.000301
+vt 0.962015 0.004473
+vt 0.032345 0.946842
+vt 0.024574 0.965181
+vt 0.027536 0.943341
+vt 0.378433 0.824768
+vt 0.384350 0.824187
+vt 0.387633 0.842266
+vt 0.032349 0.983432
+vt 0.019641 0.964242
+vt 0.381490 0.803449
+vt 0.387663 0.805471
+vt 0.742643 0.049436
+vt 0.743962 0.029783
+vt 0.748037 0.030453
+vt 0.069639 0.946125
+vt 0.073731 0.946331
+vt 0.075824 0.965880
+vt 0.743660 0.011175
+vt 0.747701 0.010514
+vt 0.077682 0.925971
+vt 0.080690 0.927631
+vt 0.775496 0.026838
+vt 0.805910 0.017225
+vt 0.805641 0.038264
+vt 0.493293 0.929631
+vt 0.502008 0.945564
+vt 0.478348 0.957605
+vt 0.788140 0.001511
+vt 0.499347 0.970089
+vt 0.766000 0.003772
+vt 0.805910 0.000898
+vt 0.823656 0.001758
+vt 0.813047 0.028292
+vt 0.750761 0.020109
+vt 0.837894 0.017084
+vt 0.750740 0.042712
+vt 0.837776 0.041125
+vt 0.766246 0.057381
+vt 0.826170 0.057381
+vt 0.790650 0.056164
+vt 0.807823 0.057218
+vt 0.478345 0.926445
+vt 0.938271 0.178496
+vt 0.918243 0.181644
+vt 0.928479 0.144683
+vt 0.911776 0.149401
+vt 0.902831 0.113992
+vt 0.921392 0.104401
+vt 0.946623 0.204662
+vt 0.919010 0.195385
+vt 0.896994 0.098739
+vt 0.915800 0.069357
+vt 0.431337 0.615757
+vt 0.397947 0.634151
+vt 0.391824 0.614837
+vt 0.875134 0.091062
+vt 0.430439 0.660648
+vt 0.396124 0.661402
+vt 0.852968 0.091090
+vt 0.903798 0.059482
+vt 0.431266 0.721972
+vt 0.394315 0.722210
+vt 0.129918 0.738382
+vt 0.088692 0.771744
+vt 0.121440 0.705813
+vt 0.154888 0.339589
+vt 0.197075 0.318718
+vt 0.217322 0.340687
+vt 0.701123 0.747144
+vt 0.742167 0.746844
+vt 0.667066 0.812741
+vt 0.651642 0.052981
+vt 0.615897 0.042727
+vt 0.651224 0.012552
+vt 0.708358 0.689438
+vt 0.737567 0.695146
+vt 0.573967 0.371705
+vt 0.606119 0.312735
+vt 0.622396 0.348454
+vt 0.699845 0.649351
+vt 0.742146 0.631360
+vt 0.665959 0.310051
+vt 0.668569 0.627550
+vt 0.679719 0.595793
+vt 0.687106 0.341061
+vt 0.659749 0.343426
+vt 0.163514 0.670902
+vt 0.160819 0.643211
+vt 0.194703 0.640878
+vt 0.726352 0.386908
+vt 0.670923 0.360638
+vt 0.098471 0.676019
+vt 0.103684 0.647841
+vt 0.771852 0.419662
+vt 0.744019 0.438281
+vt 0.061044 0.677572
+vt 0.047926 0.646539
+vt 0.772716 0.457352
+vt 0.745189 0.463285
+vt 0.159594 0.913124
+vt 0.191706 0.920948
+vt 0.148191 0.932951
+vt 0.879002 0.294475
+vt 0.882249 0.239029
+vt 0.907121 0.234451
+vt 0.148282 0.863908
+vt 0.173483 0.865830
+vt 0.880912 0.218137
+vt 0.901679 0.204662
+vt 0.154703 0.833859
+vt 0.174605 0.844985
+vt 0.702531 0.471862
+vt 0.709933 0.450131
+vt 0.708846 0.491756
+vt 0.573967 0.714829
+vt 0.613023 0.720229
+vt 0.612563 0.744539
+vt 0.707133 0.432184
+vt 0.579454 0.689291
+vt 0.618924 0.702918
+vt 0.769433 0.651276
+vt 0.744253 0.633751
+vt 0.772530 0.626187
+vt 0.604843 0.673512
+vt 0.766789 0.693765
+vt 0.742167 0.701355
+vt 0.647299 0.635832
+vt 0.633320 0.686008
+vt 0.772211 0.712915
+vt 0.753167 0.719655
+vt 0.660171 0.656651
+vt 0.624371 0.375059
+vt 0.648339 0.366758
+vt 0.674838 0.657263
+vt 0.603714 0.410464
+vt 0.594948 0.380219
+vt 0.692117 0.715273
+vt 0.599778 0.439924
+vt 0.584575 0.434571
+vt 0.627592 0.475462
+vt 0.586788 0.508429
+vt 0.633819 0.595793
+vt 0.602237 0.559009
+vt 0.646125 0.591663
+vt 0.640568 0.482049
+vt 0.629705 0.516986
+vt 0.660845 0.548435
+vt 0.652697 0.557654
+vt 0.680135 0.484017
+vt 0.603147 0.786500
+vt 0.593823 0.757125
+vt 0.697683 0.513314
+vt 0.666489 0.513712
+vt 0.631306 0.801492
+vt 0.639322 0.773998
+vt 0.658404 0.485955
+vt 0.674819 0.539696
+vt 0.895502 0.165044
+vt 0.895130 0.151710
+vt 0.887874 0.175703
+vt 0.889631 0.139272
+vt 0.361427 0.663879
+vt 0.361644 0.637024
+vt 0.876866 0.127380
+vt 0.854334 0.125796
+vt 0.362638 0.728061
+vt 0.364104 0.670678
+vt 0.315959 0.682523
+vt 0.330541 0.735957
+vt 0.293413 0.686670
+vt 0.848897 0.122673
+vt 0.370486 0.763808
+vt 0.351492 0.759158
+vt 0.346589 0.732009
+vt 0.340300 0.678399
+vt 0.337349 0.658616
+vt 0.316491 0.674934
+vt 0.019634 0.955126
+vt 0.008606 0.957181
+vt 0.011011 0.942600
+vt 0.255100 0.948480
+vt 0.244377 0.938237
+vt 0.264634 0.948025
+vt 0.675482 0.957613
+vt 0.665386 0.957806
+vt 0.680291 0.943826
+vt 0.420687 0.968763
+vt 0.422704 0.947518
+vt 0.431337 0.947862
+vt 0.680318 0.979555
+vt 0.668496 0.973272
+vt 0.047980 0.964965
+vt 0.047672 0.950519
+vt 0.057821 0.943341
+vt 0.289217 0.667253
+vt 0.278417 0.668079
+vt 0.278771 0.650319
+vt 0.293211 0.937623
+vt 0.276531 0.933400
+vt 0.288573 0.925712
+vt 0.019641 0.917120
+vt 0.019554 0.938089
+vt 0.010922 0.919021
+vt 0.272210 0.968875
+vt 0.264021 0.971526
+vt 0.258502 0.987983
+vt 0.255017 0.971249
+vt 0.247582 0.952045
+vt 0.271488 0.672468
+vt 0.287486 0.943513
+vt 0.272221 0.937426
+vt 0.740574 0.959038
+vt 0.733567 0.958551
+vt 0.734053 0.948316
+vt 0.414738 0.950739
+vt 0.412181 0.942567
+vt 0.742167 0.943970
+vt 0.721452 0.933724
+vt 0.412220 0.966535
+vt 0.001844 0.953709
+vt 0.006911 0.944193
+vt 0.239214 0.945734
+vt 0.718166 0.965649
+vt 0.718150 0.941388
+vt 0.287996 0.953414
+vt 0.272210 0.960699
+vt 0.237588 0.967130
+vt 0.243183 0.991820
+vt 0.771679 0.917662
+vt 0.762698 0.937917
+vt 0.742337 0.933996
+vt 0.591212 0.548486
+vt 0.586717 0.527571
+vt 0.766263 0.953153
+vt 0.574196 0.561988
+vt 0.574728 0.557786
+vt 0.379778 0.776050
+vt 0.391660 0.771339
+vt 0.272131 0.927361
+vt 0.252901 0.936043
+vt 0.392455 0.754363
+vt 0.307653 0.743529
+vt 0.335180 0.772494
+vt 0.426082 0.753855
+vt 0.064602 0.788054
+vt 0.049360 0.750419
+vt 0.076785 0.734917
+vt 0.423413 0.769427
+vt 0.051938 0.796579
+vt 0.037171 0.759127
+vt 0.418261 0.785222
+vt 0.377038 0.803449
+vt 0.040711 0.833008
+vt 0.864608 0.170898
+vt 0.867076 0.150616
+vt 0.868972 0.167985
+vt 0.870935 0.149342
+vt 0.884239 0.170114
+vt 0.945479 0.050623
+vt 0.946610 0.057381
+vt 0.928158 0.038728
+vt 0.893529 0.160240
+vt 0.933856 0.037321
+vt 0.928950 0.021309
+vt 0.936572 0.009239
+vt 0.945243 0.000481
+vt 0.939216 0.011736
+vt 0.934428 0.020795
+vt 0.403077 0.935992
+vt 0.402495 0.944535
+vt 0.389032 0.944524
+vt 0.046173 0.953391
+vt 0.036199 0.953589
+vt 0.042323 0.943341
+vt 0.404763 0.961014
+vt 0.046098 0.967871
+vt 0.032357 0.969739
+vt 0.403339 0.975332
+vt 0.388237 0.958872
+vt 0.544825 0.949466
+vt 0.547267 0.963589
+vt 0.534130 0.963499
+vt 0.560163 0.971977
+vt 0.560151 0.950717
+vt 0.573967 0.968120
+vt 0.882568 0.143112
+vt 0.860166 0.129326
+vt 0.907705 0.025630
+vt 0.890736 0.021482
+vt 0.892558 0.011737
+vt 0.892535 0.031569
+vt 0.914545 0.046959
+vt 0.914591 0.007295
+vt 0.901242 0.003489
+vt 0.387663 0.858363
+vt 0.382169 0.871841
+vt 0.382160 0.845449
+vt 0.287812 0.575756
+vt 0.290441 0.592347
+vt 0.278006 0.579995
+vt 0.665486 0.555104
+vt 0.280623 0.559591
+vt 0.271479 0.569337
+vt 0.678644 0.549893
+vt 0.695584 0.534597
+vt 0.674728 0.475094
+vt 0.696937 0.547803
+vt 0.716677 0.550454
+vt 0.290438 0.606680
+vt 0.279049 0.606188
+vt 0.657091 0.566097
+vt 0.282187 0.650319
+vt 0.271464 0.641002
+vt 0.672646 0.740908
+vt 0.686105 0.745453
+vt 0.660368 0.772674
+vt 0.612845 0.417112
+vt 0.677338 0.715010
+vt 0.628556 0.387723
+vt 0.678291 0.682483
+vt 0.687661 0.673060
+vt 0.649321 0.382625
+vt 0.665500 0.670260
+vt 0.668316 0.372764
+vt 0.010918 0.857646
+vt 0.003074 0.852778
+vt 0.007957 0.833008
+vt 0.692322 0.410810
+vt 0.664894 0.385317
+vt 0.019641 0.893191
+vt 0.004429 0.893494
+vt 0.695718 0.434580
+vt 0.011022 0.909798
+vt 0.003113 0.917120
+vt 0.697553 0.449366
+vt 0.731348 0.560009
+vt 0.740832 0.551291
+vt 0.737238 0.570513
+vt 0.722808 0.538248
+vt 0.690606 0.465101
+vt 0.685966 0.458432
+vt 0.971872 0.367739
+vt 0.965041 0.372700
+vt 0.965137 0.354837
+vt 0.691850 0.448000
+vt 0.960230 0.354876
+vt 0.967365 0.341660
+vt 0.876672 0.932540
+vt 0.888682 0.914255
+vt 0.891678 0.918392
+vt 0.962518 0.340048
+vt 0.970227 0.326536
+vt 0.876126 0.968132
+vt 0.882578 0.933886
+vt 0.964766 0.325585
+vt 0.992212 0.302440
+vt 0.878644 0.982283
+vt 0.886126 0.979236
+vt 0.293323 0.552914
+vt 0.287227 0.559591
+vt 0.277924 0.548625
+vt 0.887258 0.996091
+vt 0.284753 0.543613
+vt 0.279599 0.527832
+vt 0.617619 0.417765
+vt 0.271464 0.527786
+vt 0.276971 0.497694
+vt 0.609847 0.442157
+vt 0.615436 0.439281
+vt 0.283112 0.499282
+vt 0.293383 0.483978
+vt 0.629089 0.474421
+vt 0.632055 0.467864
+vt 0.960263 0.398447
+vt 0.965065 0.394798
+vt 0.973115 0.427124
+vt 0.642312 0.479234
+vt 0.966757 0.426738
+vt 0.962939 0.440783
+vt 0.674132 0.469272
+vt 0.980585 0.381531
+vt 0.976069 0.386225
+vt 0.657402 0.480346
+vt 0.658227 0.471689
+vt 0.992194 0.387297
+vt 0.987280 0.394798
+vt 0.645278 0.472678
+vt 0.969296 0.441170
+vt 0.960230 0.451689
+vt 0.848897 0.212568
+vt 0.069567 0.861905
+vt 0.034251 0.859087
+vt 0.036739 0.838666
+vt 0.851659 0.239134
+vt 0.056441 0.904337
+vt 0.019641 0.905974
+vt 0.829786 0.310051
+vt 0.806735 0.289884
+vt 0.829875 0.260879
+vt 0.069639 0.935064
+vt 0.033200 0.943341
+vt 0.790224 0.236606
+vt 0.118044 0.620974
+vt 0.768134 0.180721
+vt 0.815329 0.215350
+vt 0.168912 0.615112
+vt 0.750740 0.147811
+vt 0.784181 0.137843
+vt 0.196669 0.612037
+vt 0.786803 0.092928
+vt 0.973956 0.126742
+vt 0.955502 0.118837
+vt 0.974349 0.057381
+vt 0.293347 0.255864
+vt 0.244198 0.302266
+vt 0.232276 0.273305
+vt 0.971296 0.180245
+vt 0.946647 0.177913
+vt 0.197489 0.300883
+vt 0.975820 0.219216
+vt 0.961870 0.225311
+vt 0.044635 0.334821
+vt 0.052749 0.318055
+vt 0.073430 0.334826
+vt 0.291542 0.707522
+vt 0.282041 0.747032
+vt 0.260179 0.749511
+vt 0.206763 0.764225
+vt 0.221410 0.787285
+vt 0.258759 0.718005
+vt 0.160121 0.765444
+vt 0.175836 0.798904
+vt 0.209281 0.729896
+vt 0.991595 0.610973
+vt 0.985811 0.643127
+vt 0.959036 0.636810
+vt 0.946647 0.131914
+vt 0.937759 0.094097
+vt 0.993650 0.582110
+vt 0.963839 0.604470
+vt 0.705460 0.943500
+vt 0.705447 0.971746
+vt 0.680318 0.933724
+vt 0.997819 0.566922
+vt 0.965073 0.571464
+vt 0.164417 0.699950
+vt 0.148191 0.690247
+vt 0.212045 0.694720
+vt 0.388237 0.839269
+vt 0.397104 0.803449
+vt 0.431337 0.825211
+vt 0.090379 0.677657
+vt 0.148191 0.678321
+vt 0.054294 0.703729
+vt 0.236978 0.812687
+vt 0.269541 0.769018
+vt 0.259645 0.686681
+vt 0.192718 0.833859
+vt 0.161685 0.731949
+vt 0.122076 0.321620
+vt 0.102547 0.332408
+vt 0.089911 0.298753
+vt 0.291873 0.677634
+vt 0.388484 0.883509
+vt 0.431283 0.863314
+vt 0.031539 0.722512
+vt 0.396963 0.908442
+vt 0.424335 0.904918
+vt 0.399217 0.921207
+vt 0.018595 0.748511
+vt 0.022305 0.735296
+vt 0.427603 0.889521
+vt 0.401327 0.935982
+vt 0.411945 0.931367
+vt 0.025364 0.770179
+vt 0.150968 0.324854
+vt 0.995722 0.266566
+vt 0.986279 0.266981
+vt 0.021623 0.028995
+vt 0.090949 0.051354
+vt 0.000000 0.088309
+vt 0.488790 0.528813
+vt 0.463735 0.480456
+vt 0.524998 0.416681
+vt 0.076242 0.097555
+vt 0.005195 0.174483
+vt 0.508625 0.579869
+vt 0.559820 0.477814
+vt 0.072375 0.173441
+vt 0.089194 0.275367
+vt 0.666161 0.259383
+vt 0.750740 0.241991
+vt 0.648462 0.308659
+vt 0.046868 0.295953
+vt 0.647141 0.266441
+vt 0.632377 0.309796
+vt 0.131530 0.320231
+vt 0.000000 0.677572
+vt 0.014383 0.696078
+vt 0.279628 0.241727
+vt 0.214236 0.199983
+vt 0.700929 0.114215
+vt 0.616844 0.124949
+vt 0.688231 0.052981
+vt 0.446396 0.332480
+vt 0.534443 0.310083
+vt 0.383195 0.428785
+vt 0.293438 0.128022
+vt 0.357044 0.051228
+vt 0.334774 0.182633
+vt 0.084453 0.453414
+vt 0.080562 0.527766
+vt 0.000000 0.533971
+vt 0.390317 0.096621
+vt 0.445949 0.141554
+vt 0.349045 0.310051
+vt 0.293413 0.265118
+vt 0.417045 0.250122
+vt 0.558936 0.181995
+vt 0.297823 0.391506
+vt 0.796705 0.165139
+vt 0.817076 0.133403
+vt 0.192981 0.583294
+vt 0.173686 0.567072
+vt 0.801163 0.396257
+vt 0.790104 0.379232
+vt 0.872231 0.387077
+vt 0.188949 0.525214
+vt 0.426044 0.040922
+vt 0.453558 0.000000
+vt 0.481124 0.035997
+vt 0.193311 0.466626
+vt 0.151048 0.438756
+vt 0.455943 0.077972
+vt 0.528715 0.070482
+vt 0.220421 0.417216
+vt 0.177263 0.387038
+vt 0.578990 0.083138
+vt 0.574807 0.134582
+vt 0.300784 0.439920
+vt 0.369101 0.479851
+vt 0.345749 0.526557
+vt 0.503511 0.113687
+vt 0.144905 0.498572
+vt 0.888374 0.451818
+vt 0.802145 0.450341
+vt 0.126892 0.594693
+vt 0.841295 0.199560
+vt 0.789101 0.562807
+vt 0.881028 0.554443
+vt 0.859445 0.641337
+vt 0.772716 0.643127
+vt 0.958969 0.456490
+vt 1.000000 0.481292
+vt 0.997371 0.513179
+vt 0.941550 0.229164
+vt 0.943805 0.257234
+vt 0.907121 0.215937
+vt 0.742245 0.891626
+vt 0.742167 0.818061
+vt 0.771679 0.825859
+vt 0.040260 0.620296
+vt 0.709437 0.024009
+vt 0.716745 0.047349
+vt 0.682544 0.052981
+vt 0.682588 0.016128
+vt 0.807439 0.094926
+vt 0.257518 0.532332
+vt 0.239433 0.609174
+vt 0.773111 0.316540
+vt 0.799205 0.310051
+vt 0.841005 0.353190
+vt 0.249753 0.503459
+vt 0.522173 0.010726
+vt 0.539922 0.040900
+vt 0.251286 0.467306
+vt 0.830229 0.914255
+vt 0.876126 0.935925
+vt 0.835226 0.971020
+vt 0.268095 0.418281
+vt 0.150287 0.242345
+vt 0.741381 0.199165
+vt 0.157332 0.164068
+vt 0.666745 0.192101
+vt 0.599673 0.167911
+vt 0.141629 0.323366
+vt 0.604598 0.236508
+vt 0.591031 0.229436
+vt 0.974549 0.057381
+vt 0.962015 0.004063
+vt 0.974670 0.002818
+vt 0.578990 0.222542
+vt 0.214570 0.060249
+vt 0.155458 0.094481
+vt 0.182960 0.029154
+vt 0.438250 0.517557
+vt 0.411483 0.555665
+vt 0.160896 0.000000
+vt 0.115903 0.167895
+vt 0.464931 0.583508
+vt 0.424127 0.598092
+vt 0.122558 0.073078
+vt 0.469617 0.775889
+vt 0.444693 0.744499
+vt 0.472796 0.760358
+vt 0.915120 0.024026
+vt 0.928158 0.028161
+vt 0.924864 0.057381
+vt 0.512187 0.786990
+vt 0.716681 0.938375
+vt 0.718150 0.974956
+vt 0.705585 0.933724
+vt 0.516492 0.807822
+vt 0.559266 0.777975
+vt 0.547741 0.899450
+vt 0.569878 0.927353
+vt 0.568022 0.946860
+vt 0.544402 0.763523
+vt 0.573967 0.718010
+vt 0.546840 0.847981
+vt 0.534113 0.912685
+vt 0.555813 0.715477
+vt 0.534699 0.658345
+vt 0.917062 0.568722
+vt 0.919928 0.514296
+vt 0.928077 0.500021
+vt 0.524739 0.668771
+vt 0.474461 0.632256
+vt 0.888451 0.624979
+vt 0.896928 0.643127
+vt 0.527110 0.682678
+vt 0.453034 0.972444
+vt 0.450489 0.926445
+vt 0.463144 0.937656
+vt 0.750407 0.765874
+vt 0.760480 0.763937
+vt 0.742177 0.818060
+vt 0.572328 0.817894
+vt 0.556853 0.850313
+vt 0.742167 0.719655
+vt 0.753945 0.728824
+vt 0.556248 0.888883
+vt 0.646635 0.942236
+vt 0.661664 0.955732
+vt 0.660301 0.983700
+vt 0.573967 0.909140
+vt 0.487283 0.752201
+vt 0.314645 0.812645
+vt 0.319234 0.852151
+vt 0.298131 0.862243
+vt 0.454536 0.735892
+vt 0.470455 0.732191
+vt 0.322728 0.877397
+vt 0.305626 0.890728
+vt 0.205749 0.165988
+vt 0.744545 0.119434
+vt 0.740942 0.157161
+vt 0.436552 0.605314
+vt 0.470471 0.612764
+vt 0.578990 0.052981
+vt 0.579009 0.032276
+vt 0.607638 0.047743
+vt 0.271089 0.163970
+vt 0.293413 0.468990
+vt 0.271464 0.479118
+vt 0.288585 0.387012
+vt 0.436597 0.720227
+vt 0.445934 0.714582
+vt 0.917383 0.000153
+vt 0.925530 0.004601
+vt 0.115816 0.981074
+vt 0.118504 0.970941
+vt 0.140755 0.972378
+vt 0.436552 0.966881
+vt 0.437843 0.996485
+vt 0.936878 0.333944
+vt 0.919535 0.302500
+vt 0.940662 0.325380
+vt 0.477205 0.971782
+vt 0.468343 0.971215
+vt 0.463191 0.935729
+vt 0.911753 0.324383
+vt 0.742643 0.020180
+vt 0.742625 0.052981
+vt 0.730241 0.030939
+vt 0.227876 0.101593
+vt 0.231843 0.113282
+vt 0.204130 0.112553
+vt 0.373004 0.938850
+vt 0.341810 0.918174
+vt 0.352488 0.902558
+vt 0.445742 0.693100
+vt 0.464410 0.713025
+vt 0.323216 0.907879
+vt 0.334743 0.892059
+vt 0.274407 0.133698
+vt 0.253815 0.101566
+vt 0.262011 0.468389
+vt 0.269549 0.474025
+vt 0.362362 0.953970
+vt 0.293413 0.926874
+vt 0.191314 0.147209
+vt 0.198461 0.137712
+vt 0.228115 0.833859
+vt 0.237588 0.842129
+vt 0.228102 0.863156
+vt 0.262849 0.080627
+vt 0.247426 0.094018
+vt 0.241015 0.083257
+vt 0.343782 0.884686
+vt 0.332401 0.868636
+vt 0.358423 0.894635
+vt 0.200855 0.102343
+vt 0.378433 0.910831
+vt 0.372498 0.918754
+vt 0.682730 0.016103
+vt 0.682544 0.002001
+vt 0.692186 0.016128
+vt 0.724377 0.021299
+vt 0.723766 0.039776
+vt 0.919413 0.335515
+vt 0.922032 0.341694
+vt 0.735623 0.011403
+vt 0.579181 0.010881
+vt 0.578990 0.000422
+vt 0.589880 0.000221
+vt 0.477227 0.931627
+vt 0.472707 0.939663
+vt 0.466628 0.926445
+vt 0.127163 0.964777
+vt 0.656291 0.827125
+vt 0.646760 0.822423
+vt 0.659562 0.812741
+vt 0.274328 0.058709
+vt 0.256645 0.070319
+vt 0.328224 0.841885
+vt 0.293413 0.034580
+vt 0.269415 0.048081
+vt 0.322533 0.803449
+vt 0.514073 0.953776
+vt 0.502008 0.926445
+vt 0.524237 0.954869
+vt 0.058731 0.948538
+vt 0.069639 0.943341
+vt 0.069229 0.972115
+vt 0.502043 0.988244
+vt 0.656164 0.942236
+vt 0.646635 0.934228
+vt 0.676779 0.920740
+vt 0.754919 0.806147
+vt 0.767878 0.759850
+vt 0.668761 0.913325
+vt 0.680318 0.875038
+vt 0.115789 0.934277
+vt 0.669934 0.869218
+vt 0.937805 0.340789
+vt 0.921262 0.357052
+vt 0.960716 0.766262
+vt 0.966081 0.745894
+vt 0.978418 0.754295
+vt 0.935919 0.362799
+vt 0.914530 0.378340
+vt 0.962922 0.785734
+vt 0.973734 0.768695
+vt 0.928471 0.383507
+vt 0.920218 0.400951
+vt 0.964646 0.804624
+vt 0.976432 0.808158
+vt 0.906306 0.396678
+vt 0.904620 0.415073
+vt 0.960115 0.816460
+vt 0.888392 0.413572
+vt 0.888374 0.385963
+vt 0.990424 0.810631
+vt 0.972452 0.824861
+vt 0.894160 0.366816
+vt 0.340570 0.853133
+vt 0.352585 0.867795
+vt 0.903220 0.352638
+vt 0.988911 0.774053
+vt 0.990155 0.792362
+vt 0.990439 0.748414
+vt 0.964935 0.294592
+vt 0.946647 0.295006
+vt 0.957701 0.285534
+vt 0.950832 0.746266
+vt 0.967925 0.734537
+vt 0.960230 0.387963
+vt 0.947345 0.337758
+vt 0.202176 0.926813
+vt 0.199253 0.906246
+vt 0.227878 0.903815
+vt 0.957524 0.433422
+vt 0.193370 0.888295
+vt 0.227910 0.857816
+vt 0.928191 0.456490
+vt 0.920393 0.414168
+vt 0.191706 0.874217
+vt 0.206902 0.833859
+vt 0.899452 0.450981
+vt 0.682544 0.042569
+vt 0.669127 0.049230
+vt 0.682532 0.009091
+vt 0.657923 0.024764
+vt 0.931295 0.771810
+vt 0.950796 0.833564
+vt 0.908444 0.812087
+vt 0.932674 0.625935
+vt 0.958933 0.559572
+vt 0.935205 0.702058
+vt 0.896056 0.755792
+vt 0.930564 0.571051
+vt 0.947207 0.487149
+vt 0.950832 0.647836
+vt 0.934543 0.643127
+vt 0.888374 0.462578
+vt 0.897775 0.917074
+vt 0.896056 0.869807
+vt 0.923249 0.901211
+vt 0.867937 0.053932
+vt 0.848780 0.051662
+vt 0.837894 0.000898
+vt 0.901800 0.957875
+vt 0.797675 0.914255
+vt 0.772716 0.896319
+vt 0.811234 0.860706
+vt 0.772771 0.953946
+vt 0.779125 0.918041
+vt 0.818698 0.914255
+vt 0.777274 0.839855
+vt 0.816586 0.813804
+vt 0.896056 0.723908
+vt 0.774883 0.714392
+vt 0.888948 0.778303
+vt 0.888888 0.849684
+vt 0.894645 0.778204
+vt 0.589970 0.908303
+vt 0.602847 0.812741
+vt 0.642964 0.826913
+vt 0.911255 0.858959
+vt 0.938529 0.833564
+vt 0.573967 0.852462
+vt 0.830229 0.982701
+vt 0.772716 0.979795
+vt 0.786142 0.801659
+vt 0.798565 0.781550
+vt 0.250352 0.056629
+vt 0.400765 0.605314
+vt 0.309746 0.524160
+vt 0.084396 0.944480
+vt 0.115704 0.925971
+vt 0.115789 0.973867
+vt 0.938529 0.953736
+vt 0.978376 0.923752
+vt 0.978415 0.991743
+vt 0.680372 0.855450
+vt 0.524121 0.840909
+vt 0.867998 0.000898
+vt 0.992085 0.875683
+vt 0.102322 0.840403
+vt 0.996518 0.734537
+vt 0.436552 0.914030
+vt 0.247790 0.925712
+vt 0.291873 0.859734
+vt 0.528315 0.850824
+vt 0.957939 0.057381
+vt 0.950958 0.673094
+vt 0.381972 0.845449
+vt 0.027290 0.985056
+vt 0.748086 0.052981
+vt 0.080713 0.963798
+vt 0.422314 0.605314
+vt 0.866366 0.057381
+vt 0.178251 0.387012
+vt 0.730430 0.801134
+vt 0.615960 0.012501
+vt 0.182570 0.658044
+vt 0.715539 0.412961
+vt 0.175175 0.951396
+vt 0.905346 0.283978
+vt 0.742229 0.595793
+vt 0.625767 0.764989
+vt 0.670117 0.942236
+vt 0.431067 0.965938
+vt 0.057818 0.964482
+vt 0.290288 0.656800
+vt 0.275795 0.928390
+vt 0.250418 0.984964
+vt 0.271464 0.655049
+vt 0.418881 0.935982
+vt 0.757133 0.891626
+vt 0.771615 0.963686
+vt 0.261584 0.925712
+vt 0.318632 0.772524
+vt 0.946647 0.005174
+vt 0.389614 0.935982
+vt 0.032349 0.943538
+vt 0.389591 0.970870
+vt 0.534113 0.946861
+vt 0.573955 0.946861
+vt 0.871799 0.123096
+vt 0.282006 0.592702
+vt 0.651936 0.766901
+vt 0.015624 0.843418
+vt 0.683037 0.420436
+vt 0.747687 0.564956
+vt 0.690498 0.434794
+vt 0.884120 0.966304
+vt 0.987271 0.295381
+vt 0.891744 0.988908
+vt 0.634172 0.392425
+vt 0.289397 0.479118
+vt 0.968068 0.454915
+vt 0.067897 0.833008
+vt 0.848983 0.289137
+vt 0.848862 0.280058
+vt 0.070335 0.619675
+vt 0.995519 0.075956
+vt 0.682166 0.964164
+vt 0.958933 0.542355
+vt 0.157978 0.677572
+vt 0.281208 0.788707
+vt 0.417454 0.918577
+vt 0.013742 0.760307
+vt 0.573286 0.543916
+vt 0.746338 0.310051
+vt 0.625008 0.070302
+vt 0.573967 0.393944
+vt 0.006095 0.444935
+vt 0.512750 0.290800
+vt 0.375778 0.310051
+vt 0.840687 0.147444
+vt 0.293413 0.492756
+vt 0.112873 0.387012
+vt 0.958933 0.541902
+vt 0.907200 0.294475
+vt 0.757330 0.887300
+vt 0.073540 0.637403
+vt 0.848897 0.057381
+vt 0.876093 0.991275
+vt 0.915147 0.045144
+vt 0.705575 0.975592
+vt 0.534160 0.847858
+vt 0.486472 0.652718
+vt 0.463191 0.990955
+vt 0.564569 0.807822
+vt 0.646642 0.979506
+vt 0.521030 0.773446
+vt 0.293484 0.814900
+vt 0.723208 0.112348
+vt 0.451095 0.636749
+vt 0.615897 0.011992
+vt 0.271510 0.406966
+vt 0.141132 0.996371
+vt 0.933010 0.295381
+vt 0.461655 0.694830
+vt 0.251509 0.102830
+vt 0.224601 0.091383
+vt 0.692919 0.001283
+vt 0.716745 0.030999
+vt 0.589845 0.011992
+vt 0.148191 0.966083
+vt 0.668631 0.816303
+vt 0.289262 0.025600
+vt 0.510448 0.929062
+vt 0.057821 0.977308
+vt 0.511295 0.989598
+vt 0.766736 0.801858
+vt 0.123092 0.925971
+vt 0.973850 0.789527
+vt 0.989978 0.827716
+vt 0.912681 0.331228
+vt 0.946651 0.266981
+vt 0.200116 0.949494
+vt 0.915881 0.689226
+vt 0.906453 0.456490
+vt 0.867965 0.003514
+vt 0.938354 0.942003
+vt 0.808896 0.953046
+vt 0.888107 0.677106
+vt 0.795886 0.778303
+vt 0.642978 0.947703
+vt 0.850209 0.800478
+vt 0.173625 0.121435
+vt 0.080883 0.986508
+vt 0.946910 1.001198
+vn 0.969298 -0.011811 0.245552
+vn 0.728996 -0.656575 0.193426
+vn 0.607624 -0.510392 0.608478
+vn -0.605304 -0.505783 0.614612
+vn -0.711631 -0.679250 0.179327
+vn -0.801782 -0.000977 0.597583
+vn 0.800104 -0.002838 0.599841
+vn 0.680166 -0.546251 0.488815
+vn -0.683645 -0.547288 0.482742
+vn -0.868374 -0.002258 0.495834
+vn 0.096713 -0.755821 0.647542
+vn 0.115970 -0.869259 0.480544
+vn -0.112827 -0.874844 0.471053
+vn -0.099643 -0.746635 0.657704
+vn 0.039521 -0.963103 0.266121
+vn -0.040590 -0.969298 0.242409
+vn -0.638600 -0.696463 0.327250
+vn 0.456282 -0.535356 0.710746
+vn 0.653066 -0.686636 0.319315
+vn -0.454909 -0.541520 0.706931
+vn 0.553850 -0.633198 0.540635
+vn -0.690115 0.000336 0.723685
+vn -0.811914 -0.000916 0.583728
+vn 0.809717 -0.006989 0.586749
+vn 0.689291 -0.004578 0.724418
+vn -0.955748 -0.018250 0.293588
+vn 0.952574 -0.013123 0.303995
+vn -0.645833 0.694693 0.316630
+vn 0.455947 0.522202 0.720664
+vn 0.664357 0.682058 0.305582
+vn -0.460402 0.527726 0.713767
+vn -0.525040 0.625446 0.577136
+vn 0.530595 0.625751 0.571703
+vn 0.100467 0.744682 0.659780
+vn 0.122562 0.839534 0.529252
+vn -0.119510 0.845546 0.520310
+vn -0.103427 0.735038 0.670064
+vn 0.033967 0.969024 0.244514
+vn -0.035096 0.974761 0.220435
+vn 0.736381 0.652089 0.180273
+vn -0.609790 0.492203 0.621143
+vn -0.716178 0.677053 0.169225
+vn 0.610218 0.495590 0.618061
+vn -0.672658 0.534715 0.511429
+vn 0.668203 0.537095 0.514786
+vn -0.970580 -0.015168 0.240181
+vn 0.964446 -0.012665 0.263863
+vn -0.717948 0.658193 0.226417
+vn 0.721610 0.655568 0.222388
+vn -0.041627 0.938688 0.342204
+vn -0.607074 0.644795 0.464400
+vn 0.623676 0.628529 0.464675
+vn -0.923856 -0.013306 0.382427
+vn 0.926969 -0.012940 0.374859
+vn 0.615864 -0.636616 0.464095
+vn -0.599200 -0.652425 0.463973
+vn -0.041047 -0.940123 0.338267
+vn 0.715171 -0.662465 0.222724
+vn -0.710624 -0.665792 0.227363
+vn -0.962584 -0.011292 0.270669
+vn 0.183599 -0.005310 0.982971
+vn -0.183599 -0.005310 0.982971
+vn 0.031831 -0.941404 0.335704
+vn 0.032319 0.939940 0.339702
+vn 0.159551 -0.975249 0.152898
+vn 0.155370 -0.758965 0.632282
+vn -0.020478 -0.969237 0.245186
+vn -0.017884 -0.770898 0.636677
+vn -0.146062 -0.788720 0.597125
+vn -0.147160 -0.978057 0.147404
+vn 0.526658 -0.834651 0.161107
+vn 0.350230 -0.639149 0.684683
+vn -0.357830 -0.633290 0.686209
+vn -0.623890 -0.777184 0.081668
+vn 0.945708 -0.257851 0.197699
+vn 0.555650 -0.226356 0.799982
+vn -0.531480 -0.237861 0.812952
+vn 0.972808 0.100314 0.208716
+vn 0.565172 -0.029725 0.824396
+vn -0.556566 -0.045656 0.829524
+vn -0.938444 -0.345103 0.014252
+vn 0.955718 0.249184 0.156468
+vn 0.593677 0.108158 0.797388
+vn -0.570360 0.075137 0.817927
+vn -0.978179 0.080081 0.191687
+vn 0.891537 -0.330668 0.309458
+vn 0.348827 -0.937132 -0.008148
+vn 0.341075 -0.550951 0.761620
+vn -0.438826 -0.518998 0.733482
+vn -0.338298 -0.940672 -0.025056
+vn -0.023835 -0.226478 0.973693
+vn 0.587481 -0.784875 0.196966
+vn -0.481735 -0.373577 0.792688
+vn -0.581133 -0.781213 0.227912
+vn 0.906980 -0.400922 -0.128941
+vn 0.566546 -0.318796 0.759819
+vn -0.598895 -0.285043 0.748344
+vn -0.911802 -0.386059 -0.139866
+vn 0.845119 0.443403 0.298502
+vn -0.437086 -0.469008 0.767418
+vn -0.883724 0.392834 0.254280
+vn 0.517045 0.829127 0.212531
+vn 0.460707 -0.144810 0.875637
+vn -0.378979 -0.182501 0.907224
+vn -0.434889 0.886593 0.157414
+vn 0.597552 0.784722 0.164586
+vn 0.480117 -0.183264 0.857814
+vn -0.312662 -0.011322 0.949767
+vn -0.602344 0.781274 0.163610
+vn 0.224708 0.960143 0.166204
+vn 0.269936 0.213691 0.938841
+vn -0.253792 0.214393 0.943175
+vn -0.225532 0.958892 0.172124
+vn -0.595233 0.779077 0.196753
+vn -0.127384 0.170049 0.977142
+vn 0.160863 0.153417 0.974975
+vn 0.605060 0.768029 0.209754
+vn -0.810816 0.562304 0.162267
+vn -0.055269 -0.043153 0.997528
+vn 0.029298 -0.157872 0.986999
+vn 0.824183 0.546770 0.147313
+vn -0.058382 0.948454 0.311411
+vn -0.032319 -0.056307 0.997864
+vn 0.357250 -0.274300 0.892788
+vn 0.263253 -0.114536 0.957884
+vn -0.217994 -0.123081 0.968139
+vn -0.289773 -0.224128 0.930448
+vn 0.149022 -0.154149 0.976714
+vn -0.144200 -0.159764 0.976562
+vn 0.219001 0.037141 0.975005
+vn 0.308451 0.003845 0.951201
+vn 0.225410 -0.360759 0.904996
+vn -0.194250 0.065706 0.978729
+vn 0.358806 -0.119175 0.925748
+vn -0.244667 -0.360698 0.899991
+vn 0.460219 -0.165105 0.872280
+vn -0.356182 -0.123600 0.926176
+vn 0.430494 -0.361705 0.826930
+vn 0.500107 -0.375774 0.780175
+vn -0.421644 -0.403058 0.812220
+vn 0.153691 -0.497421 0.853755
+vn -0.125034 -0.324015 0.937742
+vn 0.055879 -0.229682 0.971648
+vn -0.335856 -0.361888 0.869594
+vn -0.296457 -0.267312 0.916837
+vn 0.003754 0.069918 0.997528
+vn 0.239296 -0.301187 0.923032
+vn 0.152196 -0.254830 0.954924
+vn 0.035981 -0.203162 0.978454
+vn 0.044649 -0.260231 0.964507
+vn 0.164586 -0.172674 0.971099
+vn -0.193823 -0.148991 0.969634
+vn -0.040223 -0.340556 0.939329
+vn -0.046571 -0.378857 0.924253
+vn 0.108341 -0.325205 0.939390
+vn 0.089267 -0.423902 0.901273
+vn 0.146123 -0.119297 0.982025
+vn -0.195044 -0.275826 0.941191
+vn -0.156804 -0.133427 0.978545
+vn 0.134404 0.006745 0.990875
+vn 0.181707 -0.045412 0.982299
+vn -0.192755 -0.046144 0.980132
+vn -0.133549 -0.001770 0.991028
+vn 0.500259 -0.429243 0.751946
+vn -0.006775 -0.470107 0.882565
+vn -0.000305 0.000366 0.999969
+vn -0.000244 -0.034364 0.999390
+vn -0.038423 -0.597888 0.800623
+vn 0.806146 -0.393200 0.442122
+vn 0.926237 -0.243049 0.288003
+vn 0.583575 -0.692862 0.423475
+vn -0.528703 -0.713797 0.459243
+vn -0.930326 -0.220985 0.292611
+vn -0.431654 -0.465926 0.772362
+vn 0.003235 0.175207 0.984497
+vn 0.618641 0.775658 0.124790
+vn -0.627552 0.771203 0.106479
+vn -0.010743 0.091189 0.995758
+vn 0.066439 0.360210 0.930479
+vn -0.293588 0.940031 0.173467
+vn 0.239082 0.953398 0.183966
+vn 0.172155 0.825526 0.537431
+vn -0.026460 0.911954 0.409345
+vn -0.008820 -0.868068 0.496353
+vn 0.000000 -0.522172 0.852809
+vn -0.387005 -0.746239 0.541581
+vn -0.006317 0.191961 0.981353
+vn 0.197607 0.589587 0.783135
+vn -0.133305 0.596484 0.791436
+vn 0.361095 0.471267 0.804651
+vn -0.364666 0.463973 0.807276
+vn -0.491714 -0.287484 0.821925
+vn 0.493149 -0.284585 0.822047
+vn 0.387005 -0.746239 0.541581
+vn -0.836604 0.046083 0.545824
+vn -0.819605 -0.279183 0.500259
+vn 0.799493 0.004364 0.600635
+vn -0.655446 0.133946 0.743248
+vn 0.650655 0.148747 0.744652
+vn 0.927763 0.353008 0.120884
+vn -0.922819 0.371471 0.101871
+vn -0.963622 0.232734 0.131199
+vn 0.930601 0.343516 0.126347
+vn -0.928922 0.361003 0.082034
+vn -0.146825 -0.523362 0.839351
+vn -0.019440 -0.957091 0.289102
+vn -0.633198 -0.000183 0.773980
+vn 0.200842 -0.471145 0.858852
+vn -0.366924 0.603717 0.707694
+vn 0.635121 0.042756 0.771203
+vn -0.038118 0.575427 0.816919
+vn 0.414106 0.579821 0.701621
+vn -0.324534 0.475509 0.817652
+vn 0.290048 0.468734 0.834346
+vn 0.004364 0.530412 0.847713
+vn 0.673757 0.115452 0.729850
+vn -0.671468 0.144963 0.726707
+vn 0.516800 -0.703696 0.487533
+vn -0.517655 -0.704123 0.486007
+vn 0.004608 -0.696341 0.717673
+vn 0.118198 -0.059420 0.991180
+vn 0.010315 -0.071566 0.997375
+vn 0.278085 -0.112186 0.953948
+vn -0.158574 -0.080203 0.984069
+vn -0.084292 -0.054628 0.994934
+vn -0.271462 -0.086459 0.958556
+vn -0.155828 -0.081790 0.984375
+vn 0.006928 -0.228980 0.973388
+vn 0.039155 -0.219062 0.974914
+vn 0.184454 -0.186316 0.964995
+vn -0.199530 -0.195441 0.960173
+vn 0.307169 -0.016175 0.951506
+vn -0.266060 -0.048555 0.962706
+vn 0.278054 -0.092654 0.956053
+vn -0.297678 -0.031037 0.954131
+vn -0.483291 -0.203925 0.851344
+vn 0.163793 -0.069735 0.984008
+vn -0.181890 -0.070498 0.980773
+vn -0.322306 -0.097232 0.941618
+vn 0.281625 -0.001068 0.959502
+vn -0.055269 -0.127842 0.990234
+vn 0.172338 0.134526 0.975799
+vn -0.190680 0.102176 0.976318
+vn 0.151402 0.061769 0.986511
+vn -0.155034 0.102145 0.982604
+vn 0.202094 -0.112400 0.972869
+vn 0.463424 -0.394910 0.793237
+vn -0.500839 -0.444319 0.742759
+vn -0.300699 -0.264077 0.916410
+vn 0.174383 -0.268319 0.947386
+vn -0.099582 -0.304575 0.947233
+vn 0.181097 -0.142918 0.972991
+vn 0.000122 -0.378307 0.925657
+vn 0.274056 -0.855617 0.439100
+vn -0.139470 -0.915372 0.377606
+vn 0.142308 -0.582629 0.800165
+vn -0.383984 -0.135075 0.913388
+vn 0.422926 -0.107761 0.899716
+vn 0.192145 0.191351 0.962523
+vn -0.124180 0.616443 0.777520
+vn 0.143071 0.558672 0.816919
+vn 0.165288 0.609790 0.775109
+vn -0.156377 0.564592 0.810389
+vn 0.432264 0.583300 0.687643
+vn -0.043825 0.006928 0.998993
+vn -0.419660 0.600818 0.680319
+vn -0.692007 0.295755 0.658498
+vn 0.789361 -0.203192 0.579302
+vn -0.793847 -0.286508 0.536363
+vn 0.801630 0.010987 0.597674
+vn -0.798669 0.019379 0.601428
+vn 0.688040 0.298471 0.661397
+vn -0.034486 0.872189 0.487899
+vn 0.587024 0.735069 0.339122
+vn -0.428510 0.885250 0.180792
+vn 0.476638 0.509445 -0.716392
+vn 0.115024 0.655263 -0.746574
+vn -0.116886 0.645741 -0.754509
+vn -0.274575 0.887997 -0.368816
+vn 0.227485 0.874508 -0.428266
+vn -0.362590 0.911954 -0.191870
+vn 0.695700 0.581378 -0.421827
+vn -0.739097 0.606952 -0.292032
+vn -0.856471 -0.470870 -0.211341
+vn 0.544328 -0.837153 -0.053316
+vn -0.626057 -0.778191 -0.049348
+vn 0.471969 -0.863674 -0.176794
+vn -0.367626 -0.909513 -0.193915
+vn 0.022553 -0.270486 -0.962432
+vn 0.081851 -0.739525 -0.668081
+vn 0.277078 -0.314737 -0.907804
+vn -0.609485 -0.776421 -0.160131
+vn -0.056978 -0.325968 -0.943632
+vn 0.205023 -0.186377 -0.960814
+vn -0.408521 -0.291971 -0.864772
+vn -0.047884 -0.873745 -0.483993
+vn 0.096286 -0.757225 -0.645985
+vn -0.117924 -0.163854 -0.979400
+vn -0.011048 -0.775536 -0.631184
+vn -0.666524 -0.438459 -0.602863
+vn 0.512986 -0.451186 -0.730216
+vn -0.628101 0.092471 -0.772607
+vn 0.605335 0.033296 -0.795251
+vn -0.624897 0.122379 -0.771020
+vn 0.895657 0.257729 -0.362407
+vn 0.779839 -0.010498 -0.625843
+vn 0.689322 -0.668691 -0.278603
+vn -0.943876 0.105594 -0.312906
+vn 0.978698 -0.195837 0.061495
+vn -0.956206 -0.136235 0.258950
+vn -0.998230 0.018311 0.056459
+vn 0.785699 -0.571459 0.236732
+vn -0.936064 -0.336802 0.101566
+vn -0.752586 -0.591113 0.290109
+vn -0.026521 -0.284921 -0.958159
+vn 0.445479 -0.358348 -0.820399
+vn -0.003723 -0.693411 -0.720511
+vn -0.526444 -0.659352 -0.536699
+vn -0.440352 -0.320841 -0.838496
+vn 0.522263 -0.653615 -0.547685
+vn -0.003998 -0.939146 -0.343455
+vn -0.501724 -0.833308 -0.232002
+vn 0.507065 -0.837581 -0.203314
+vn 0.572680 -0.819666 0.011994
+vn -0.574694 -0.818323 0.000885
+vn 0.013398 -0.982177 -0.187384
+vn 0.930204 -0.306192 -0.202338
+vn 0.721030 -0.689810 0.065065
+vn -0.750359 -0.650197 0.119053
+vn -0.985504 -0.161412 0.052156
+vn -0.000702 0.340098 -0.940367
+vn 0.473006 0.176305 -0.863216
+vn -0.512650 0.168615 -0.841853
+vn 0.022614 0.839167 0.543382
+vn 0.444227 0.724418 0.527085
+vn 0.003876 0.999725 0.022156
+vn -0.428785 0.902493 0.039796
+vn -0.479781 0.718162 0.504013
+vn 0.413495 0.909635 0.039460
+vn 0.391247 0.815271 -0.426832
+vn -0.426527 0.799676 -0.422498
+vn 0.017151 0.840358 -0.541734
+vn 0.345531 0.912442 -0.219123
+vn 0.783105 0.613575 0.101077
+vn -0.609241 0.791070 -0.054598
+vn -0.423444 0.815302 0.394879
+vn 0.376049 0.790338 0.483627
+vn 0.663930 0.679250 0.312723
+vn -0.763054 0.496628 0.413587
+vn 0.770470 0.505783 0.387951
+vn 0.848628 0.528764 -0.014008
+vn -0.867824 0.496811 0.002960
+vn -0.659536 0.748070 -0.073275
+vn 0.678396 0.731376 -0.069521
+vn 0.872158 0.314554 -0.374645
+vn -0.893521 0.254524 -0.369823
+vn -0.498611 0.550218 -0.669790
+vn 0.783105 -0.148503 -0.603839
+vn 0.619648 -0.060457 -0.782525
+vn -0.609943 -0.022065 -0.792108
+vn -0.666402 -0.020234 -0.745293
+vn 0.607532 0.569567 -0.553575
+vn -0.659322 0.677725 0.325449
+vn 0.340648 0.883206 0.322306
+vn -0.364483 0.902860 0.227973
+vn 0.051820 0.522477 0.851039
+vn -0.470138 0.525224 -0.709250
+vn 0.985015 -0.160466 0.063051
+vn 0.997009 -0.033296 -0.069521
+vn -0.997925 0.040437 -0.049684
+vn 0.914365 0.231208 0.332347
+vn -0.800714 0.562822 0.205023
+vn 0.579028 -0.802698 0.142705
+vn -0.596820 -0.785852 -0.161840
+vn 0.310495 -0.950560 0.000977
+vn -0.567309 -0.808283 0.157537
+vn 0.887173 -0.157720 0.433607
+vn 0.353465 -0.592669 -0.723685
+vn -0.542100 -0.499283 -0.675863
+vn -0.269173 -0.631458 -0.727165
+vn 0.563280 -0.817286 -0.121311
+vn -0.278451 -0.959380 -0.044710
+vn 0.529221 -0.505112 -0.681722
+vn -0.019929 0.880276 0.473983
+vn -0.291055 0.781671 0.551592
+vn 0.551164 -0.078768 0.830622
+vn -0.446120 -0.022675 0.894650
+vn 0.302561 0.761559 0.573077
+vn -0.000488 0.879788 0.475326
+vn 0.321421 -0.092166 0.942412
+vn -0.391156 -0.121555 0.912229
+vn -0.571978 -0.114872 0.812159
+vn -0.393994 0.854701 0.337962
+vn 0.355235 0.879025 0.317942
+vn 0.778802 0.167791 0.604389
+vn 0.156774 -0.080477 0.984344
+vn -0.152318 -0.121067 0.980865
+vn 0.652608 -0.476821 0.588794
+vn 0.046876 0.367962 0.928648
+vn -0.762596 0.175115 0.622700
+vn -0.040040 0.303934 0.951842
+vn 0.502884 -0.780999 0.370312
+vn -0.499222 0.289041 0.816828
+vn -0.680380 -0.426405 0.595996
+vn 0.508896 0.321085 0.798669
+vn 0.340922 0.318339 0.884518
+vn -0.348796 0.227271 0.909207
+vn -0.039399 -0.635121 0.771386
+vn -0.183081 0.955626 0.230720
+vn -0.252693 0.850124 0.461959
+vn 0.186804 0.953825 0.235084
+vn -0.809534 0.584704 -0.052431
+vn 0.762139 0.647084 -0.019318
+vn -0.993072 -0.055208 0.103519
+vn 0.984741 -0.099582 0.142613
+vn -0.143864 -0.753685 0.641255
+vn 0.133305 -0.750389 0.647389
+vn 0.560442 -0.660878 0.499100
+vn -0.558458 -0.654469 0.509629
+vn 0.449232 -0.038331 0.892575
+vn 0.684194 -0.555773 0.472182
+vn -0.727409 -0.512742 0.456008
+vn 0.857204 -0.493118 -0.148289
+vn -0.734123 0.128758 0.666677
+vn 0.038148 -0.643818 0.764183
+vn -0.971038 -0.203528 -0.125004
+vn 0.372723 -0.224158 0.900449
+vn -0.772301 -0.265358 0.577136
+vn 0.243477 0.816980 0.522691
+vn 0.599841 0.513138 0.613880
+vn -0.761498 0.457961 0.458602
+vn 0.842036 -0.176244 0.509781
+vn 0.960936 -0.118839 0.249855
+vn -0.934416 -0.089084 0.344829
+vn -0.875362 -0.183599 0.447188
+vn 0.851466 0.041353 0.522752
+vn -0.570055 0.736076 0.364940
+vn 0.686361 -0.623371 0.374554
+vn 0.848354 -0.435377 0.301157
+vn -0.853206 -0.408429 0.324259
+vn -0.746544 -0.565935 0.349773
+vn 0.726066 -0.498917 0.473128
+vn -0.665517 -0.560930 0.492325
+vn 0.731284 0.126347 0.670247
+vn 0.659291 -0.468490 0.588061
+vn -0.663869 -0.467299 0.583819
+vn -0.621509 -0.442213 0.646626
+vn -0.517594 -0.452284 0.726279
+vn 0.758354 0.266518 0.594806
+vn -0.767510 0.233589 0.596912
+vn -0.954314 0.102573 0.280587
+vn 0.481368 0.634388 0.604816
+vn -0.424299 0.457137 0.781640
+vn 0.449232 0.379864 0.808618
+vn -0.659291 -0.351695 0.664510
+vn 0.644978 0.310129 0.698386
+vn -0.709769 0.313242 0.630909
+vn -0.043367 0.940458 0.337077
+vn 0.041322 0.952971 0.300150
+vn 0.648213 -0.420576 0.634724
+vn -0.520493 -0.249794 0.816492
+vn 0.461776 -0.329142 0.823664
+vn 0.260689 -0.522874 0.811518
+vn -0.755058 0.022370 0.655232
+vn 0.756401 -0.087558 0.648183
+vn 0.563982 0.547929 0.617756
+vn -0.620655 0.437605 0.650563
+vn -0.063082 0.700308 0.711020
+vn 0.292917 0.370922 0.881222
+vn 0.195105 0.038942 0.979980
+vn -0.397534 0.146397 0.905820
+vn -0.190680 0.519211 0.833064
+vn 0.334666 -0.004578 0.942289
+vn -0.418226 -0.076937 0.905057
+vn -0.193274 -0.005554 0.981109
+vn 0.460494 -0.052187 0.886105
+vn 0.314371 -0.103732 0.943602
+vn -0.325419 -0.115177 0.938505
+vn -0.299570 -0.054537 0.952483
+vn 0.334300 0.106784 0.936369
+vn 0.289651 0.315806 0.903500
+vn -0.462752 -0.381817 0.800012
+vn -0.358562 0.308054 0.881191
+vn -0.372265 -0.019379 0.927915
+vn 0.572527 -0.418928 0.704733
+vn 0.148106 0.701712 0.696860
+vn 0.383129 -0.068514 0.921140
+vn -0.211341 -0.548540 0.808924
+vn -0.101627 -0.834284 -0.541826
+vn 0.091678 -0.842799 -0.530290
+vn 0.055483 -0.676473 -0.734336
+vn -0.034883 -0.686087 -0.726676
+vn -0.461257 -0.798151 0.387494
+vn -0.646596 -0.478866 -0.593738
+vn 0.925260 0.091830 -0.367992
+vn 0.287271 0.620930 -0.729270
+vn -0.923978 0.086001 -0.372600
+vn -0.279183 0.597797 -0.751427
+vn 0.414228 0.550890 -0.724479
+vn -0.427778 0.575518 -0.696951
+vn 0.650044 0.584643 -0.485336
+vn 0.650197 -0.509964 -0.563128
+vn -0.661122 0.588549 -0.465285
+vn 0.868221 -0.004730 0.496109
+vn -0.547227 -0.639424 0.540025
+vn -0.134617 -0.552934 0.822230
+vn -0.147710 0.189856 0.970611
+s 1
+f 47/1/1 1/2/2 3/3/3
+f 4/4/4 2/5/5 46/6/6
+f 45/7/7 3/3/3 5/8/8
+f 6/9/9 4/4/4 44/10/10
+f 3/11/3 9/12/11 7/13/12
+f 8/14/13 10/15/14 6/9/9
+f 1/2/2 11/16/15 9/17/11
+f 10/15/14 12/18/16 4/4/4
+f 11/19/15 13/20/17 9/21/11
+f 16/22/18 14/23/19 12/18/16
+f 9/21/11 15/24/20 7/25/12
+f 18/26/21 16/22/18 10/15/14
+f 15/24/20 21/27/22 19/28/23
+f 20/29/24 22/30/25 18/31/21
+f 13/20/17 23/32/26 21/27/22
+f 22/30/25 24/33/27 16/34/18
+f 23/35/26 25/36/28 21/37/22
+f 28/38/29 26/39/30 24/33/27
+f 21/37/22 27/40/31 29/41/32
+f 30/42/33 28/38/29 20/29/24
+f 27/40/31 33/43/34 31/44/35
+f 32/45/36 34/46/37 30/42/33
+f 25/47/28 35/48/38 33/49/34
+f 34/46/37 36/50/39 28/38/29
+f 35/48/38 37/51/40 33/49/34
+f 40/52/41 38/53/42 36/54/39
+f 33/49/34 39/55/43 31/56/35
+f 42/57/44 40/52/41 34/58/37
+f 39/55/43 45/7/7 41/59/45
+f 44/60/10 46/61/6 40/52/41
+f 37/51/40 47/1/1 39/55/43
+f 46/61/6 48/62/46 38/53/42
+f 47/63/1 37/64/40 49/65/47
+f 52/66/48 38/53/42 48/62/46
+f 37/64/40 35/67/38 51/68/49
+f 54/69/50 36/70/39 38/71/42
+f 35/72/38 25/36/28 55/73/51
+f 56/74/52 26/75/30 54/69/50
+f 25/36/28 23/35/26 57/76/53
+f 58/77/54 24/78/27 56/74/52
+f 23/79/26 13/80/17 57/81/53
+f 60/82/55 14/83/19 24/84/27
+f 13/80/17 11/85/15 59/86/56
+f 64/87/57 12/88/16 14/83/19
+f 11/89/15 1/90/2 65/91/58
+f 66/92/59 2/93/5 64/94/57
+f 1/90/2 47/95/1 49/96/47
+f 50/97/60 48/98/46 66/92/59
+f 61/99/61 65/100/58 49/101/47
+f 50/102/60 66/103/59 62/104/62
+f 63/105/63 65/100/58 61/99/61
+f 62/104/62 66/103/59 64/106/57
+f 61/99/61 59/107/56 63/105/63
+f 64/108/57 60/109/55 62/110/62
+f 61/99/61 57/111/53 59/107/56
+f 60/109/55 58/112/54 62/110/62
+f 61/99/61 55/113/51 57/111/53
+f 58/112/54 56/114/52 62/110/62
+f 61/99/61 53/115/64 55/113/51
+f 56/114/52 54/116/50 62/110/62
+f 61/99/61 51/117/49 53/115/64
+f 54/116/50 52/118/48 62/110/62
+f 61/99/61 49/101/47 51/117/49
+f 52/119/48 50/102/60 62/104/62
+f 89/120/65 174/121/66 91/122/67
+f 176/123/68 175/124/69 90/125/70
+f 87/126/71 172/127/72 89/120/65
+f 175/124/69 173/128/73 88/129/74
+f 85/130/75 170/131/76 172/132/72
+f 173/128/73 171/133/77 88/129/74
+f 83/134/78 168/135/79 170/131/76
+f 171/133/77 169/136/80 86/137/81
+f 81/138/82 166/139/83 168/135/79
+f 169/140/80 167/141/84 84/142/85
+f 79/143/86 92/144/87 146/145/88
+f 147/146/89 93/147/90 165/148/91
+f 92/149/87 94/150/92 146/151/88
+f 149/152/93 95/153/94 93/147/90
+f 94/154/92 96/155/95 150/156/96
+f 151/157/97 97/158/98 149/152/93
+f 96/155/95 98/159/99 150/156/96
+f 153/160/100 99/161/101 97/158/98
+f 98/159/99 100/162/102 152/163/103
+f 155/164/104 101/165/105 99/166/101
+f 100/162/102 102/167/106 154/168/107
+f 157/169/108 103/170/109 101/165/105
+f 102/167/106 104/171/110 158/172/111
+f 159/173/112 105/174/113 157/169/108
+f 104/171/110 106/175/114 160/176/115
+f 161/177/116 107/178/117 159/179/112
+f 106/180/114 108/181/118 162/182/119
+f 163/183/120 109/184/121 161/177/116
+f 108/181/118 67/185/122 68/186/123
+f 68/187/123 67/188/122 163/183/120
+f 110/189/124 128/190/125 162/191/119
+f 161/192/116 129/193/126 111/194/127
+f 128/190/125 179/195/128 158/172/111
+f 159/196/112 180/197/129 161/192/116
+f 126/198/130 156/199/131 179/200/128
+f 159/196/112 157/201/108 180/197/129
+f 124/202/132 154/203/107 126/198/130
+f 157/201/108 155/204/104 127/205/133
+f 122/206/134 152/207/103 124/202/132
+f 155/204/104 153/160/100 125/208/135
+f 120/209/136 150/156/96 122/210/134
+f 153/160/100 151/157/97 123/211/137
+f 118/212/138 148/213/139 120/209/136
+f 151/157/97 149/152/93 119/214/140
+f 116/215/141 146/216/88 148/213/139
+f 149/152/93 147/146/89 119/214/140
+f 114/217/142 164/218/143 146/216/88
+f 147/219/89 165/220/91 117/221/144
+f 114/217/142 181/222/145 177/223/146
+f 177/223/146 182/224/147 115/225/148
+f 110/189/124 162/191/119 112/226/149
+f 68/227/123 163/228/120 111/194/127
+f 112/226/149 68/229/123 178/230/150
+f 178/231/150 68/227/123 184/232/151
+f 177/223/146 181/222/145 183/233/152
+f 184/234/151 182/224/147 178/230/150
+f 135/235/153 137/236/154 176/123/68
+f 176/123/68 137/236/154 175/124/69
+f 133/237/155 135/235/153 174/121/66
+f 175/124/69 136/238/156 173/128/73
+f 131/239/157 133/240/155 170/131/76
+f 173/128/73 134/241/158 132/242/159
+f 166/139/83 187/243/160 185/244/161
+f 186/245/162 188/246/163 169/247/80
+f 131/239/157 170/131/76 168/135/79
+f 169/136/80 171/133/77 186/248/162
+f 144/249/164 190/250/165 187/243/160
+f 189/251/166 190/250/165 188/246/163
+f 185/244/161 187/243/160 189/251/166
+f 189/251/166 188/246/163 69/252/167
+f 130/253/168 131/239/157 69/252/167
+f 186/245/162 132/254/159 69/252/167
+f 142/255/169 193/256/170 191/257/171
+f 192/258/172 194/259/173 145/260/174
+f 140/261/175 195/262/176 142/263/169
+f 194/264/173 196/265/177 141/266/178
+f 139/267/179 197/268/180 140/261/175
+f 196/269/177 198/270/181 139/271/179
+f 138/272/182 71/273/183 197/274/180
+f 198/275/181 71/276/183 139/277/179
+f 190/278/165 144/279/164 70/280/184
+f 192/258/172 145/260/174 190/281/165
+f 70/282/184 191/283/171 208/284/185
+f 207/285/186 192/258/172 70/282/184
+f 71/273/183 199/286/187 197/274/180
+f 201/287/188 199/288/187 71/276/183
+f 197/289/180 200/290/189 202/291/190
+f 203/292/191 201/293/188 196/265/177
+f 195/294/176 202/291/190 193/295/170
+f 205/296/192 203/292/191 196/265/177
+f 193/256/170 204/297/193 206/298/194
+f 207/285/186 205/299/192 194/259/173
+f 199/300/187 204/301/193 200/290/189
+f 203/302/191 205/303/192 199/288/187
+f 199/304/187 208/284/185 204/305/193
+f 207/285/186 208/284/185 205/299/192
+f 139/306/179 140/307/175 164/308/143
+f 165/220/91 141/309/178 139/310/179
+f 140/307/175 142/311/169 164/308/143
+f 212/312/195 143/313/196 165/220/91
+f 142/314/169 144/249/164 211/315/197
+f 214/316/198 145/260/174 143/317/196
+f 144/249/164 187/243/160 213/318/199
+f 167/319/84 188/246/163 145/320/174
+f 81/138/82 209/321/200 166/139/83
+f 214/322/198 210/323/201 82/324/202
+f 209/321/200 215/325/203 213/318/199
+f 212/326/195 216/327/204 210/323/201
+f 79/328/86 164/329/143 211/315/197
+f 212/326/195 165/330/91 216/327/204
+f 131/331/157 130/332/168 222/333/205
+f 72/334/206 130/332/168 132/242/159
+f 133/237/155 131/331/157 220/335/207
+f 223/336/208 132/337/159 134/338/158
+f 135/235/153 133/237/155 218/339/209
+f 221/340/210 134/338/158 136/341/156
+f 137/342/154 135/343/153 217/344/211
+f 219/345/212 136/341/156 137/342/154
+f 217/346/211 218/347/209 229/348/213
+f 230/349/214 219/350/212 231/351/215
+f 218/347/209 220/352/207 229/348/213
+f 228/353/216 221/354/210 219/350/212
+f 220/352/207 222/355/205 227/356/217
+f 226/357/218 223/358/208 221/359/210
+f 222/360/205 72/361/206 225/362/219
+f 224/363/220 72/334/206 223/364/208
+f 224/365/220 231/366/215 229/367/213
+f 230/368/214 231/366/215 226/369/218
+f 225/370/219 229/367/213 227/371/217
+f 228/372/216 230/373/214 226/374/218
+f 183/375/152 181/376/145 232/377/221
+f 235/378/222 182/224/147 184/234/151
+f 112/379/149 183/375/152 254/380/223
+f 233/381/224 184/234/151 113/382/225
+f 110/189/124 112/226/149 254/383/223
+f 255/384/226 113/382/225 257/385/227
+f 181/376/145 114/386/142 252/387/228
+f 253/388/229 115/225/148 235/378/222
+f 114/386/142 116/389/141 250/390/230
+f 251/391/231 117/392/144 115/393/148
+f 116/215/141 118/212/138 248/394/232
+f 249/395/233 119/214/140 251/391/231
+f 118/212/138 120/209/136 246/396/234
+f 247/397/235 121/398/236 249/395/233
+f 120/209/136 122/210/134 244/399/237
+f 245/400/238 123/211/137 247/397/235
+f 122/210/134 124/401/132 244/399/237
+f 243/402/239 125/403/135 123/404/137
+f 124/401/132 126/405/130 242/406/240
+f 241/407/241 127/408/133 125/403/135
+f 126/405/130 179/195/128 236/409/242
+f 237/410/243 180/411/129 127/408/133
+f 179/195/128 128/190/125 238/412/244
+f 239/413/245 129/414/126 237/415/243
+f 128/190/125 110/189/124 238/412/244
+f 257/385/227 111/416/127 129/414/126
+f 238/412/244 256/417/246 258/418/247
+f 259/419/248 257/420/227 277/421/249
+f 236/409/242 238/412/244 276/422/250
+f 277/421/249 239/423/245 279/424/251
+f 240/425/252 236/426/242 278/427/253
+f 279/424/251 237/428/243 275/429/254
+f 242/430/240 240/425/252 274/431/255
+f 275/429/254 241/432/241 273/433/256
+f 244/434/237 242/430/240 270/435/257
+f 273/436/256 243/437/239 245/438/238
+f 246/439/234 244/434/237 270/435/257
+f 271/440/258 245/438/238 269/441/259
+f 248/394/232 246/396/234 266/442/260
+f 269/441/259 247/443/235 249/444/233
+f 250/445/230 248/394/232 264/446/261
+f 267/447/262 249/444/233 265/448/263
+f 252/449/228 250/445/230 262/450/264
+f 265/451/263 251/452/231 253/453/229
+f 234/454/265 252/449/228 262/450/264
+f 263/455/266 253/453/229 281/456/267
+f 256/417/246 254/383/223 260/457/268
+f 261/458/269 255/459/226 259/419/248
+f 254/383/223 232/460/221 282/461/270
+f 283/462/271 233/463/224 261/458/269
+f 232/460/221 234/454/265 280/464/272
+f 281/456/267 235/465/222 283/466/271
+f 67/185/122 108/181/118 73/467/273
+f 285/468/274 109/469/121 67/470/122
+f 108/181/118 106/180/114 284/471/275
+f 287/472/276 107/473/117 109/469/121
+f 106/474/114 104/475/110 288/476/277
+f 289/477/278 105/478/113 287/472/276
+f 104/475/110 102/479/106 288/476/277
+f 291/480/279 103/170/109 105/174/113
+f 102/479/106 100/481/102 290/482/280
+f 293/483/281 101/165/105 103/170/109
+f 100/481/102 98/484/99 294/485/282
+f 295/486/283 99/166/101 293/483/281
+f 98/484/99 96/487/95 294/485/282
+f 297/488/284 97/489/98 99/490/101
+f 96/491/95 94/492/92 298/493/285
+f 299/494/286 95/495/94 297/488/284
+f 94/492/92 92/144/87 300/496/287
+f 301/497/288 93/498/90 299/494/286
+f 308/499/289 309/500/290 338/501/291
+f 329/502/292 309/503/290 308/504/289
+f 307/505/293 308/504/289 336/506/294
+f 339/507/295 308/504/289 307/505/293
+f 306/508/296 307/505/293 340/509/297
+f 337/510/298 307/505/293 306/508/296
+f 89/511/65 91/512/67 306/513/296
+f 306/514/296 91/122/67 341/515/299
+f 87/516/71 89/511/65 340/517/297
+f 341/518/299 90/519/70 335/520/300
+f 85/521/75 87/516/71 334/522/301
+f 335/523/300 88/524/74 331/525/302
+f 83/526/78 85/527/75 330/528/303
+f 331/529/302 86/530/81 333/531/304
+f 330/532/303 336/506/294 338/533/291
+f 339/507/295 337/510/298 333/534/304
+f 330/532/303 334/535/301 340/509/297
+f 341/536/299 335/523/300 337/510/298
+f 326/537/305 332/538/306 328/539/307
+f 339/507/295 333/534/304 327/540/308
+f 81/541/82 83/526/78 332/542/306
+f 333/531/304 84/142/85 327/543/308
+f 209/544/200 342/545/309 215/546/203
+f 345/547/310 343/548/311 210/323/201
+f 81/541/82 326/549/305 209/544/200
+f 343/548/311 327/543/308 82/324/202
+f 79/550/86 215/546/203 346/551/312
+f 345/547/310 216/327/204 80/552/313
+f 79/143/86 346/553/312 92/144/87
+f 301/497/288 347/554/314 80/555/313
+f 77/556/315 324/557/316 304/558/317
+f 353/559/318 325/560/319 77/561/315
+f 304/558/317 352/562/320 78/563/321
+f 351/564/322 353/559/318 304/565/317
+f 78/563/321 350/566/323 348/567/324
+f 349/568/325 351/569/322 305/570/326
+f 305/571/326 348/567/324 328/539/307
+f 329/572/292 349/568/325 309/573/290
+f 326/537/305 328/539/307 342/574/309
+f 349/575/325 329/576/292 327/543/308
+f 296/577/327 298/493/285 318/578/328
+f 319/579/329 299/580/286 311/581/330
+f 76/582/331 316/583/332 77/561/315
+f 325/560/319 317/584/333 76/582/331
+f 302/585/334 358/586/335 303/587/336
+f 357/588/337 359/589/338 302/590/334
+f 303/587/336 356/591/339 354/592/340
+f 355/593/341 357/594/337 75/595/342
+f 75/595/342 354/592/340 316/596/332
+f 317/584/333 355/597/341 76/582/331
+f 292/598/343 294/485/282 362/599/344
+f 363/600/345 295/486/283 365/601/346
+f 364/602/347 362/603/344 366/604/348
+f 369/605/349 363/600/345 365/601/346
+f 366/606/348 368/607/350 370/608/351
+f 371/609/352 369/605/349 373/610/353
+f 372/611/354 370/608/351 376/612/355
+f 377/613/356 371/609/352 375/614/357
+f 314/615/358 378/616/359 376/612/355
+f 375/617/357 379/618/360 315/619/361
+f 316/596/332 354/592/340 374/620/362
+f 375/617/357 355/597/341 379/618/360
+f 354/592/340 356/591/339 372/611/354
+f 373/610/353 357/588/337 375/614/357
+f 356/591/339 358/586/335 366/606/348
+f 367/621/363 359/589/338 373/610/353
+f 358/622/335 360/623/364 364/602/347
+f 365/601/346 361/624/365 367/621/363
+f 290/482/280 292/598/343 360/625/364
+f 365/601/346 293/483/281 291/480/279
+f 74/626/366 360/623/364 302/627/334
+f 359/628/338 361/629/365 74/626/366
+f 284/630/275 286/631/367 288/632/277
+f 289/633/278 287/634/276 291/635/279
+f 284/636/275 290/637/280 360/638/364
+f 361/624/365 291/480/279 74/639/366
+f 73/640/273 284/641/275 74/642/366
+f 74/642/366 285/643/274 73/640/273
+f 294/485/282 296/644/327 362/599/344
+f 311/645/330 297/646/284 295/486/283
+f 310/647/368 312/648/369 368/649/350
+f 369/605/349 313/650/370 363/600/345
+f 312/651/369 382/652/371 370/608/351
+f 371/609/352 383/653/372 369/605/349
+f 314/654/358 376/655/355 382/656/371
+f 371/609/352 377/613/356 315/657/361
+f 348/567/324 350/566/323 384/658/373
+f 387/659/374 351/569/322 349/568/325
+f 318/578/328 384/658/373 320/660/375
+f 387/659/374 385/661/376 319/579/329
+f 298/493/285 300/496/287 384/658/373
+f 385/661/376 301/662/288 319/579/329
+f 300/496/287 344/663/377 342/574/309
+f 343/664/311 345/665/310 385/661/376
+f 342/574/309 348/567/324 384/658/373
+f 385/661/376 349/568/325 343/664/311
+f 300/666/287 346/667/312 344/668/377
+f 345/665/310 347/669/314 301/662/288
+f 314/670/358 322/671/378 378/672/359
+f 381/673/379 323/674/380 315/619/361
+f 316/675/332 378/672/359 324/557/316
+f 381/673/379 379/618/360 317/584/333
+f 320/660/375 386/676/381 322/671/378
+f 381/673/379 387/677/374 321/678/382
+f 350/566/323 352/562/320 386/676/381
+f 381/673/379 353/559/318 351/564/322
+f 324/557/316 380/679/383 352/562/320
+f 353/559/318 381/673/379 325/560/319
+f 400/680/384 388/681/385 402/682/386
+f 415/683/387 389/684/388 401/685/389
+f 400/680/384 402/682/386 404/686/390
+f 405/687/391 403/688/392 399/689/393
+f 398/690/394 404/686/390 396/691/395
+f 407/692/396 405/693/391 399/694/393
+f 396/691/395 406/695/397 394/696/398
+f 409/697/399 407/692/396 397/698/400
+f 394/696/398 408/699/401 392/700/402
+f 411/701/403 409/702/399 395/703/404
+f 392/700/402 410/704/405 412/705/406
+f 413/706/407 411/701/403 391/707/408
+f 410/704/405 420/708/409 412/705/406
+f 419/709/410 421/710/411 411/711/403
+f 408/712/401 422/713/412 410/714/405
+f 421/715/411 423/716/413 409/697/399
+f 406/717/397 424/718/414 422/713/412
+f 423/716/413 425/719/415 409/697/399
+f 404/720/390 426/721/416 424/722/414
+f 425/719/415 427/723/417 407/692/396
+f 402/682/386 428/724/418 404/686/390
+f 427/725/417 429/726/419 403/727/392
+f 402/682/386 414/728/420 416/729/421
+f 417/730/422 415/731/387 429/726/419
+f 318/578/328 320/660/375 442/732/423
+f 445/733/424 321/734/382 319/579/329
+f 320/735/375 390/736/425 412/705/406
+f 413/737/407 391/738/408 445/739/424
+f 310/740/368 318/578/328 442/732/423
+f 443/741/426 319/742/329 313/743/370
+f 382/744/371 430/745/427 414/728/420
+f 415/683/387 431/746/428 383/747/372
+f 412/748/406 418/749/429 440/750/430
+f 441/751/431 419/709/410 445/752/424
+f 438/753/432 446/754/433 440/755/430
+f 445/756/424 447/757/434 439/758/435
+f 434/759/436 446/754/433 438/753/432
+f 439/760/435 447/761/434 437/762/437
+f 432/763/438 448/764/439 434/765/436
+f 447/766/434 449/767/440 433/768/441
+f 430/745/427 448/769/439 450/770/442
+f 433/768/441 449/767/440 431/771/428
+f 414/728/420 430/745/427 416/729/421
+f 451/772/443 431/771/428 415/731/387
+f 312/773/369 448/764/439 382/774/371
+f 431/775/428 449/776/440 313/650/370
+f 312/773/369 442/732/423 448/764/439
+f 447/766/434 443/777/426 313/778/370
+f 442/732/423 444/779/444 446/780/433
+f 447/781/434 445/782/424 443/783/426
+f 416/784/421 450/785/442 452/786/445
+f 453/787/446 451/772/443 477/788/447
+f 450/785/442 432/763/438 452/786/445
+f 463/789/448 433/768/441 451/772/443
+f 432/763/438 434/765/436 460/790/449
+f 461/791/450 435/792/451 463/789/448
+f 434/793/436 436/794/452 460/795/449
+f 459/796/453 437/762/437 435/797/451
+f 436/798/452 438/753/432 458/799/454
+f 457/800/455 439/760/435 437/762/437
+f 438/801/432 440/802/430 454/803/456
+f 455/804/457 441/805/431 457/806/455
+f 440/750/430 418/749/429 474/807/458
+f 475/808/459 419/809/410 441/810/431
+f 428/811/418 416/784/421 476/812/460
+f 477/788/447 417/730/422 465/813/461
+f 426/814/416 428/811/418 464/815/462
+f 465/813/461 429/726/419 467/816/463
+f 424/817/414 426/818/416 468/819/464
+f 467/820/463 427/821/417 425/822/415
+f 422/823/412 424/817/414 468/819/464
+f 469/824/465 425/825/415 471/826/466
+f 420/827/409 422/713/412 470/828/467
+f 471/826/466 423/829/413 473/830/468
+f 418/749/429 420/831/409 474/807/458
+f 473/830/468 421/832/411 475/808/459
+f 458/799/454 456/833/469 478/834/470
+f 481/835/471 457/836/455 459/837/453
+f 478/834/470 480/838/472 484/839/473
+f 483/840/474 481/835/471 479/841/475
+f 484/839/473 482/842/476 488/843/477
+f 489/844/478 483/840/474 487/845/479
+f 486/846/480 488/843/477 492/847/481
+f 491/848/482 489/844/478 487/845/479
+f 464/849/462 476/850/460 486/846/480
+f 487/845/479 477/851/447 493/852/483
+f 452/853/445 484/839/473 476/850/460
+f 487/854/479 485/855/484 453/787/446
+f 452/853/445 462/856/485 484/839/473
+f 479/841/475 463/857/448 453/858/446
+f 458/799/454 478/834/470 462/856/485
+f 463/857/448 479/841/475 461/859/450
+f 454/860/456 474/861/458 456/862/469
+f 481/835/471 475/863/459 455/864/457
+f 472/865/486 482/842/476 474/866/458
+f 481/867/471 483/868/474 473/869/468
+f 470/870/467 488/843/477 472/865/486
+f 483/868/474 489/871/478 471/872/466
+f 468/873/464 490/874/487 470/870/467
+f 489/871/478 491/875/482 469/876/465
+f 466/877/488 492/847/481 490/874/487
+f 491/878/482 493/879/483 469/880/465
+f 464/849/462 492/847/481 466/877/488
+f 467/881/463 493/879/483 465/149/461
+f 392/882/402 390/883/425 504/884/489
+f 505/885/490 391/707/408 503/886/491
+f 394/887/398 392/882/402 502/888/492
+f 503/886/491 393/889/493 501/890/494
+f 396/891/395 394/887/398 498/892/495
+f 501/890/494 395/703/404 397/893/400
+f 398/894/394 396/895/395 496/896/496
+f 499/897/497 397/898/400 399/899/393
+f 400/900/384 398/894/394 496/896/496
+f 497/901/498 399/902/393 495/903/499
+f 388/904/385 400/905/384 494/906/500
+f 495/903/499 401/907/389 507/908/501
+f 494/909/500 502/910/492 504/629/489
+f 505/911/490 503/912/491 507/908/501
+f 494/909/500 496/913/496 502/910/492
+f 501/914/494 497/915/498 495/916/499
+f 496/896/496 498/917/495 500/918/502
+f 501/914/494 499/919/497 497/915/498
+f 314/920/358 382/921/371 388/904/385
+f 389/922/388 383/923/372 507/908/501
+f 314/670/358 506/924/503 322/671/378
+f 505/925/490 507/926/501 315/619/361
+f 320/927/375 322/928/378 504/929/489
+f 505/930/490 323/931/380 321/932/382
+f 45/7/7 47/1/1 3/3/3
+f 2/5/5 48/933/46 46/6/6
+f 43/934/504 45/7/7 5/8/8
+f 4/4/4 46/6/6 44/10/10
+f 5/935/8 3/11/3 7/13/12
+f 10/15/14 4/4/4 6/9/9
+f 3/3/3 1/2/2 9/17/11
+f 12/18/16 2/5/5 4/4/4
+f 13/20/17 15/24/20 9/21/11
+f 10/15/14 16/22/18 12/18/16
+f 15/24/20 17/936/505 7/25/12
+f 8/14/13 18/26/21 10/15/14
+f 17/936/505 15/24/20 19/28/23
+f 22/30/25 16/34/18 18/31/21
+f 15/24/20 13/20/17 21/27/22
+f 24/33/27 14/937/19 16/34/18
+f 25/36/28 27/40/31 21/37/22
+f 22/30/25 28/38/29 24/33/27
+f 19/938/23 21/37/22 29/41/32
+f 28/38/29 22/30/25 20/29/24
+f 29/41/32 27/40/31 31/44/35
+f 34/46/37 28/38/29 30/42/33
+f 27/939/31 25/47/28 33/49/34
+f 36/50/39 26/39/30 28/38/29
+f 37/51/40 39/55/43 33/49/34
+f 34/58/37 40/52/41 36/54/39
+f 39/55/43 41/59/45 31/56/35
+f 32/940/36 42/57/44 34/58/37
+f 45/7/7 43/934/504 41/59/45
+f 42/57/44 44/60/10 40/52/41
+f 47/1/1 45/7/7 39/55/43
+f 40/52/41 46/61/6 38/53/42
+f 37/64/40 51/68/49 49/65/47
+f 50/941/60 52/66/48 48/62/46
+f 35/67/38 53/942/64 51/68/49
+f 52/943/48 54/69/50 38/71/42
+f 53/944/64 35/72/38 55/73/51
+f 26/75/30 36/70/39 54/69/50
+f 55/73/51 25/36/28 57/76/53
+f 24/78/27 26/75/30 56/74/52
+f 13/80/17 59/86/56 57/81/53
+f 58/945/54 60/82/55 24/84/27
+f 11/85/15 63/946/63 59/86/56
+f 60/82/55 64/87/57 14/83/19
+f 63/947/63 11/89/15 65/91/58
+f 2/93/5 12/948/16 64/94/57
+f 65/91/58 1/90/2 49/96/47
+f 48/98/46 2/93/5 66/92/59
+f 174/121/66 176/123/68 91/122/67
+f 91/122/67 176/123/68 90/125/70
+f 172/127/72 174/121/66 89/120/65
+f 90/125/70 175/124/69 88/129/74
+f 87/949/71 85/130/75 172/132/72
+f 171/133/77 86/137/81 88/129/74
+f 85/130/75 83/134/78 170/131/76
+f 169/136/80 84/950/85 86/137/81
+f 83/134/78 81/138/82 168/135/79
+f 167/141/84 82/324/202 84/142/85
+f 164/951/143 79/143/86 146/145/88
+f 93/147/90 80/952/313 165/148/91
+f 94/150/92 148/953/139 146/151/88
+f 147/146/89 149/152/93 93/147/90
+f 148/213/139 94/154/92 150/156/96
+f 97/158/98 95/153/94 149/152/93
+f 98/159/99 152/163/103 150/156/96
+f 151/157/97 153/160/100 97/158/98
+f 100/162/102 154/168/107 152/163/103
+f 153/954/100 155/164/104 99/166/101
+f 102/167/106 156/955/131 154/168/107
+f 155/164/104 157/169/108 101/165/105
+f 156/955/131 102/167/106 158/172/111
+f 105/174/113 103/170/109 157/169/108
+f 158/172/111 104/171/110 160/176/115
+f 107/178/117 105/956/113 159/179/112
+f 160/957/115 106/180/114 162/182/119
+f 109/184/121 107/178/117 161/177/116
+f 162/182/119 108/181/118 68/186/123
+f 67/188/122 109/184/121 163/183/120
+f 128/190/125 160/176/115 162/191/119
+f 163/228/120 161/192/116 111/194/127
+f 160/176/115 128/190/125 158/172/111
+f 180/197/129 129/193/126 161/192/116
+f 156/199/131 158/958/111 179/200/128
+f 157/201/108 127/205/133 180/197/129
+f 154/203/107 156/199/131 126/198/130
+f 155/204/104 125/208/135 127/205/133
+f 152/207/103 154/203/107 124/202/132
+f 153/160/100 123/211/137 125/208/135
+f 150/156/96 152/163/103 122/210/134
+f 151/157/97 121/398/236 123/211/137
+f 148/213/139 150/156/96 120/209/136
+f 121/398/236 151/157/97 119/214/140
+f 118/212/138 116/215/141 148/213/139
+f 147/146/89 117/392/144 119/214/140
+f 116/215/141 114/217/142 146/216/88
+f 165/220/91 115/225/148 117/221/144
+f 164/218/143 114/217/142 177/223/146
+f 165/220/91 177/223/146 115/225/148
+f 162/191/119 68/229/123 112/226/149
+f 113/959/225 68/227/123 111/194/127
+f 183/233/152 112/226/149 178/230/150
+f 68/227/123 113/959/225 184/232/151
+f 178/230/150 177/223/146 183/233/152
+f 182/224/147 177/223/146 178/230/150
+f 174/121/66 135/235/153 176/123/68
+f 137/236/154 136/238/156 175/124/69
+f 172/127/72 133/237/155 174/121/66
+f 136/238/156 134/241/158 173/128/73
+f 133/240/155 172/132/72 170/131/76
+f 171/133/77 173/128/73 132/242/159
+f 168/135/79 166/139/83 185/244/161
+f 188/246/163 167/319/84 169/247/80
+f 185/244/161 131/239/157 168/135/79
+f 171/133/77 132/242/159 186/248/162
+f 190/250/165 189/251/166 187/243/160
+f 190/250/165 145/320/174 188/246/163
+f 69/252/167 185/244/161 189/251/166
+f 188/246/163 186/245/162 69/252/167
+f 131/239/157 185/244/161 69/252/167
+f 132/254/159 130/253/168 69/252/167
+f 144/279/164 142/255/169 191/257/171
+f 194/259/173 143/317/196 145/260/174
+f 195/262/176 193/960/170 142/263/169
+f 143/961/196 194/264/173 141/266/178
+f 197/268/180 195/262/176 140/261/175
+f 141/962/178 196/269/177 139/271/179
+f 139/963/179 138/272/182 197/274/180
+f 71/276/183 138/964/182 139/277/179
+f 144/279/164 191/257/171 70/280/184
+f 70/282/184 192/258/172 190/281/165
+f 191/283/171 206/965/194 208/284/185
+f 208/284/185 207/285/186 70/282/184
+f 199/286/187 200/966/189 197/274/180
+f 198/275/181 201/287/188 71/276/183
+f 195/294/176 197/289/180 202/291/190
+f 201/293/188 198/967/181 196/265/177
+f 202/291/190 204/301/193 193/295/170
+f 194/264/173 205/296/192 196/265/177
+f 191/257/171 193/256/170 206/298/194
+f 192/258/172 207/285/186 194/259/173
+f 204/301/193 202/291/190 200/290/189
+f 201/287/188 203/302/191 199/288/187
+f 208/284/185 206/965/194 204/305/193
+f 208/284/185 199/304/187 205/299/192
+f 177/968/146 139/306/179 164/308/143
+f 177/223/146 165/220/91 139/310/179
+f 142/311/169 211/969/197 164/308/143
+f 143/313/196 141/309/178 165/220/91
+f 144/249/164 213/318/199 211/315/197
+f 212/970/195 214/316/198 143/317/196
+f 187/243/160 166/139/83 213/318/199
+f 214/971/198 167/319/84 145/320/174
+f 209/321/200 213/318/199 166/139/83
+f 167/141/84 214/322/198 82/324/202
+f 215/325/203 211/315/197 213/318/199
+f 214/322/198 212/326/195 210/323/201
+f 215/325/203 79/328/86 211/315/197
+f 165/330/91 80/552/313 216/327/204
+f 130/332/168 72/334/206 222/333/205
+f 223/364/208 72/334/206 132/242/159
+f 131/331/157 222/333/205 220/335/207
+f 221/340/210 223/336/208 134/338/158
+f 133/237/155 220/335/207 218/339/209
+f 219/345/212 221/340/210 136/341/156
+f 135/343/153 218/972/209 217/344/211
+f 217/344/211 219/345/212 137/342/154
+f 231/973/215 217/346/211 229/348/213
+f 219/350/212 217/974/211 231/351/215
+f 220/352/207 227/356/217 229/348/213
+f 230/349/214 228/353/216 219/350/212
+f 222/355/205 225/975/219 227/356/217
+f 228/976/216 226/357/218 221/359/210
+f 72/361/206 224/977/220 225/362/219
+f 226/978/218 224/363/220 223/364/208
+f 225/370/219 224/365/220 229/367/213
+f 231/366/215 224/365/220 226/369/218
+f 181/376/145 234/979/265 232/377/221
+f 233/381/224 235/378/222 184/234/151
+f 183/375/152 232/377/221 254/380/223
+f 255/384/226 233/381/224 113/382/225
+f 256/417/246 110/189/124 254/383/223
+f 113/382/225 111/416/127 257/385/227
+f 234/979/265 181/376/145 252/387/228
+f 115/225/148 182/224/147 235/378/222
+f 252/387/228 114/386/142 250/390/230
+f 253/980/229 251/391/231 115/393/148
+f 250/445/230 116/215/141 248/394/232
+f 119/214/140 117/392/144 251/391/231
+f 248/394/232 118/212/138 246/396/234
+f 121/398/236 119/214/140 249/395/233
+f 246/396/234 120/209/136 244/399/237
+f 123/211/137 121/398/236 247/397/235
+f 124/401/132 242/406/240 244/399/237
+f 245/981/238 243/402/239 123/404/137
+f 126/405/130 240/982/252 242/406/240
+f 243/402/239 241/407/241 125/403/135
+f 240/982/252 126/405/130 236/409/242
+f 241/407/241 237/410/243 127/408/133
+f 236/409/242 179/195/128 238/412/244
+f 129/414/126 180/983/129 237/415/243
+f 110/189/124 256/417/246 238/412/244
+f 239/413/245 257/385/227 129/414/126
+f 276/422/250 238/412/244 258/418/247
+f 257/420/227 239/423/245 277/421/249
+f 278/984/253 236/409/242 276/422/250
+f 239/423/245 237/428/243 279/424/251
+f 274/431/255 240/425/252 278/427/253
+f 237/428/243 241/432/241 275/429/254
+f 272/985/506 242/430/240 274/431/255
+f 241/432/241 243/986/239 273/433/256
+f 242/430/240 272/985/506 270/435/257
+f 271/440/258 273/436/256 245/438/238
+f 268/987/507 246/439/234 270/435/257
+f 245/438/238 247/443/235 269/441/259
+f 246/396/234 268/988/507 266/442/260
+f 267/447/262 269/441/259 249/444/233
+f 248/394/232 266/442/260 264/446/261
+f 249/444/233 251/989/231 265/448/263
+f 250/445/230 264/446/261 262/450/264
+f 263/455/266 265/451/263 253/453/229
+f 280/464/272 234/454/265 262/450/264
+f 253/453/229 235/465/222 281/456/267
+f 258/418/247 256/417/246 260/457/268
+f 255/459/226 257/420/227 259/419/248
+f 260/457/268 254/383/223 282/461/270
+f 233/463/224 255/459/226 261/458/269
+f 282/461/270 232/460/221 280/464/272
+f 235/465/222 233/990/224 283/466/271
+f 108/181/118 284/471/275 73/467/273
+f 73/991/273 285/468/274 67/470/122
+f 106/180/114 286/992/367 284/471/275
+f 285/468/274 287/472/276 109/469/121
+f 286/993/367 106/474/114 288/476/277
+f 105/478/113 107/473/117 287/472/276
+f 102/479/106 290/482/280 288/476/277
+f 289/994/278 291/480/279 105/174/113
+f 100/481/102 292/598/343 290/482/280
+f 291/480/279 293/483/281 103/170/109
+f 292/598/343 100/481/102 294/485/282
+f 99/166/101 101/165/105 293/483/281
+f 96/487/95 296/644/327 294/485/282
+f 295/995/283 297/488/284 99/490/101
+f 296/577/327 96/491/95 298/493/285
+f 95/495/94 97/489/98 297/488/284
+f 298/493/285 94/492/92 300/496/287
+f 93/498/90 95/495/94 299/494/286
+f 309/500/290 328/539/307 338/501/291
+f 339/507/295 329/502/292 308/504/289
+f 308/504/289 338/533/291 336/506/294
+f 337/510/298 339/507/295 307/505/293
+f 307/505/293 336/506/294 340/509/297
+f 341/536/299 337/510/298 306/508/296
+f 340/517/297 89/511/65 306/513/296
+f 91/122/67 90/125/70 341/515/299
+f 334/522/301 87/516/71 340/517/297
+f 90/519/70 88/996/74 335/520/300
+f 330/997/303 85/521/75 334/522/301
+f 88/524/74 86/998/81 331/525/302
+f 332/542/306 83/526/78 330/528/303
+f 86/530/81 84/142/85 333/531/304
+f 332/999/306 330/532/303 338/533/291
+f 337/510/298 331/525/302 333/534/304
+f 336/506/294 330/532/303 340/509/297
+f 335/523/300 331/525/302 337/510/298
+f 332/538/306 338/501/291 328/539/307
+f 329/502/292 339/507/295 327/540/308
+f 326/549/305 81/541/82 332/542/306
+f 84/142/85 82/324/202 327/543/308
+f 342/545/309 344/1000/377 215/546/203
+f 216/327/204 345/547/310 210/323/201
+f 326/549/305 342/545/309 209/544/200
+f 210/323/201 343/548/311 82/324/202
+f 215/546/203 344/1000/377 346/551/312
+f 347/1001/314 345/547/310 80/552/313
+f 346/553/312 300/496/287 92/144/87
+f 93/498/90 301/497/288 80/555/313
+f 324/557/316 352/562/320 304/558/317
+f 304/565/317 353/559/318 77/561/315
+f 352/562/320 350/566/323 78/563/321
+f 78/1002/321 351/564/322 304/565/317
+f 305/571/326 78/563/321 348/567/324
+f 351/569/322 78/1003/321 305/570/326
+f 309/500/290 305/571/326 328/539/307
+f 349/568/325 305/570/326 309/573/290
+f 328/539/307 348/567/324 342/574/309
+f 343/548/311 349/575/325 327/543/308
+f 310/740/368 296/577/327 318/578/328
+f 299/580/286 297/1004/284 311/581/330
+f 316/583/332 324/1005/316 77/561/315
+f 77/561/315 325/560/319 76/582/331
+f 358/586/335 356/591/339 303/587/336
+f 303/1006/336 357/588/337 302/590/334
+f 75/595/342 303/587/336 354/592/340
+f 357/594/337 303/587/336 75/595/342
+f 76/1007/331 75/595/342 316/596/332
+f 355/597/341 75/1008/342 76/582/331
+f 364/1009/347 292/598/343 362/599/344
+f 295/486/283 293/483/281 365/601/346
+f 362/603/344 368/649/350 366/604/348
+f 367/621/363 369/605/349 365/601/346
+f 372/611/354 366/606/348 370/608/351
+f 369/605/349 367/621/363 373/610/353
+f 374/620/362 372/611/354 376/612/355
+f 371/609/352 373/610/353 375/614/357
+f 378/616/359 374/620/362 376/612/355
+f 377/1010/356 375/617/357 315/619/361
+f 378/616/359 316/596/332 374/620/362
+f 355/597/341 317/584/333 379/618/360
+f 374/620/362 354/592/340 372/611/354
+f 357/588/337 355/1011/341 375/614/357
+f 372/611/354 356/591/339 366/606/348
+f 359/589/338 357/588/337 373/610/353
+f 366/604/348 358/622/335 364/602/347
+f 361/624/365 359/589/338 367/621/363
+f 292/598/343 364/1009/347 360/625/364
+f 361/624/365 365/601/346 291/480/279
+f 360/623/364 358/622/335 302/627/334
+f 302/627/334 359/628/338 74/626/366
+f 290/1012/280 284/630/275 288/632/277
+f 287/634/276 285/1013/274 291/635/279
+f 74/1014/366 284/636/275 360/638/364
+f 291/480/279 285/1015/274 74/639/366
+f 296/644/327 310/1016/368 362/599/344
+f 363/600/345 311/645/330 295/486/283
+f 362/603/344 310/647/368 368/649/350
+f 313/650/370 311/645/330 363/600/345
+f 368/607/350 312/651/369 370/608/351
+f 383/653/372 313/650/370 369/605/349
+f 376/655/355 370/1017/351 382/656/371
+f 383/653/372 371/609/352 315/657/361
+f 350/566/323 386/676/381 384/658/373
+f 385/661/376 387/659/374 349/568/325
+f 384/658/373 386/676/381 320/660/375
+f 321/734/382 387/659/374 319/579/329
+f 318/578/328 298/493/285 384/658/373
+f 301/662/288 299/580/286 319/579/329
+f 384/658/373 300/496/287 342/574/309
+f 345/665/310 301/662/288 385/661/376
+f 322/671/378 380/679/383 378/672/359
+f 379/618/360 381/673/379 315/619/361
+f 378/672/359 380/679/383 324/557/316
+f 325/560/319 381/673/379 317/584/333
+f 386/676/381 380/679/383 322/671/378
+f 323/674/380 381/673/379 321/678/382
+f 352/562/320 380/679/383 386/676/381
+f 387/677/374 381/673/379 351/564/322
+f 388/681/385 414/728/420 402/682/386
+f 403/1018/392 415/683/387 401/685/389
+f 398/690/394 400/680/384 404/686/390
+f 403/688/392 401/1019/389 399/689/393
+f 404/686/390 406/695/397 396/691/395
+f 397/698/400 407/692/396 399/694/393
+f 406/695/397 408/699/401 394/696/398
+f 395/1020/404 409/697/399 397/698/400
+f 408/699/401 410/704/405 392/700/402
+f 393/889/493 411/701/403 395/703/404
+f 390/736/425 392/700/402 412/705/406
+f 411/701/403 393/889/493 391/707/408
+f 420/708/409 418/1021/429 412/705/406
+f 413/1022/407 419/709/410 411/711/403
+f 422/713/412 420/827/409 410/714/405
+f 411/1023/403 421/715/411 409/697/399
+f 408/712/401 406/717/397 422/713/412
+f 425/719/415 407/692/396 409/697/399
+f 406/1024/397 404/720/390 424/722/414
+f 427/723/417 405/693/391 407/692/396
+f 428/724/418 426/1025/416 404/686/390
+f 405/1026/391 427/725/417 403/727/392
+f 428/724/418 402/682/386 416/729/421
+f 415/731/387 403/727/392 429/726/419
+f 320/660/375 444/779/444 442/732/423
+f 443/1027/426 445/733/424 319/579/329
+f 444/1028/444 320/735/375 412/705/406
+f 391/738/408 321/1029/382 445/739/424
+f 312/773/369 310/740/368 442/732/423
+f 319/742/329 311/1030/330 313/743/370
+f 388/681/385 382/744/371 414/728/420
+f 389/684/388 415/683/387 383/747/372
+f 444/1031/444 412/748/406 440/750/430
+f 419/709/410 413/1022/407 445/752/424
+f 446/754/433 444/1032/444 440/755/430
+f 441/805/431 445/756/424 439/758/435
+f 436/798/452 434/759/436 438/753/432
+f 447/761/434 435/797/451 437/762/437
+f 448/764/439 446/780/433 434/765/436
+f 435/792/451 447/766/434 433/768/441
+f 448/769/439 432/1033/438 450/770/442
+f 451/772/443 433/768/441 431/771/428
+f 430/745/427 450/770/442 416/729/421
+f 417/730/422 451/772/443 415/731/387
+f 448/764/439 430/1034/427 382/774/371
+f 383/653/372 431/775/428 313/650/370
+f 442/732/423 446/780/433 448/764/439
+f 449/767/440 447/766/434 313/778/370
+f 476/812/460 416/784/421 452/786/445
+f 451/772/443 417/730/422 477/788/447
+f 432/763/438 462/1035/485 452/786/445
+f 453/787/446 463/789/448 451/772/443
+f 462/1035/485 432/763/438 460/790/449
+f 435/792/451 433/768/441 463/789/448
+f 436/794/452 458/1036/454 460/795/449
+f 461/1037/450 459/796/453 435/797/451
+f 438/753/432 456/833/469 458/799/454
+f 459/796/453 457/800/455 437/762/437
+f 456/1038/469 438/801/432 454/803/456
+f 441/805/431 439/758/435 457/806/455
+f 454/1039/456 440/750/430 474/807/458
+f 455/1040/457 475/808/459 441/810/431
+f 464/815/462 428/811/418 476/812/460
+f 417/730/422 429/726/419 465/813/461
+f 466/1041/488 426/814/416 464/815/462
+f 429/726/419 427/725/417 467/816/463
+f 426/818/416 466/1042/488 468/819/464
+f 469/1043/465 467/820/463 425/822/415
+f 470/1044/467 422/823/412 468/819/464
+f 425/825/415 423/829/413 471/826/466
+f 472/1045/486 420/827/409 470/828/467
+f 423/829/413 421/832/411 473/830/468
+f 420/831/409 472/1046/486 474/807/458
+f 421/832/411 419/809/410 475/808/459
+f 456/833/469 480/838/472 478/834/470
+f 479/841/475 481/835/471 459/837/453
+f 480/838/472 482/842/476 484/839/473
+f 485/1047/484 483/840/474 479/841/475
+f 486/846/480 484/839/473 488/843/477
+f 483/840/474 485/1047/484 487/845/479
+f 488/843/477 490/874/487 492/847/481
+f 493/852/483 491/848/482 487/845/479
+f 492/847/481 464/849/462 486/846/480
+f 477/851/447 465/1048/461 493/852/483
+f 484/839/473 486/846/480 476/850/460
+f 477/788/447 487/854/479 453/787/446
+f 462/856/485 478/834/470 484/839/473
+f 485/1047/484 479/841/475 453/858/446
+f 460/1049/449 458/799/454 462/856/485
+f 479/841/475 459/837/453 461/859/450
+f 474/861/458 480/1050/472 456/862/469
+f 457/836/455 481/835/471 455/864/457
+f 482/842/476 480/838/472 474/866/458
+f 475/1051/459 481/867/471 473/869/468
+f 488/843/477 482/842/476 472/865/486
+f 473/869/468 483/868/474 471/872/466
+f 490/874/487 488/843/477 470/870/467
+f 471/872/466 489/871/478 469/876/465
+f 468/873/464 466/877/488 490/874/487
+f 493/879/483 467/881/463 469/880/465
+f 502/888/492 392/882/402 504/884/489
+f 391/707/408 393/889/493 503/886/491
+f 500/1052/502 394/887/398 502/888/492
+f 393/889/493 395/703/404 501/890/494
+f 394/887/398 500/1052/502 498/892/495
+f 499/1053/497 501/890/494 397/893/400
+f 396/895/395 498/917/495 496/896/496
+f 497/1054/498 499/897/497 399/899/393
+f 494/1055/500 400/900/384 496/896/496
+f 399/902/393 401/907/389 495/903/499
+f 506/1056/503 388/904/385 494/906/500
+f 401/907/389 389/922/388 507/908/501
+f 506/1057/503 494/909/500 504/629/489
+f 503/912/491 495/903/499 507/908/501
+f 496/913/496 500/1058/502 502/910/492
+f 503/1059/491 501/914/494 495/916/499
+f 506/1056/503 314/920/358 388/904/385
+f 383/923/372 315/1060/361 507/908/501
+f 506/924/503 504/1061/489 322/671/378
+f 323/674/380 505/925/490 315/619/361
+f 390/1062/425 320/927/375 504/929/489
+f 391/1063/408 505/930/490 321/932/382
diff --git a/src/datavis3d/engine/meshes/backgroudFlat.obj b/src/datavis3d/engine/meshes/backgroudFlat.obj
new file mode 100644
index 00000000..cf4d10a5
--- /dev/null
+++ b/src/datavis3d/engine/meshes/backgroudFlat.obj
@@ -0,0 +1,32 @@
+# Blender v2.66 (sub 0) OBJ File: 'backgroud.blend'
+# www.blender.org
+o Cube
+v 1.000000 -1.000000 -1.000000
+v 1.000000 -1.000000 1.000000
+v -1.000000 -1.000000 1.000000
+v -1.000000 -1.000000 -1.000000
+v 0.999999 1.000000 1.000001
+v -1.000000 1.000000 1.000000
+v -1.000000 1.000000 -1.000000
+vt 0.000000 0.501529
+vt 0.001529 1.000000
+vt 0.500000 0.998471
+vt 0.501529 0.500000
+vt 1.000000 0.498471
+vt 0.998471 0.000000
+vt 0.500000 0.498471
+vt 0.498471 0.000000
+vt 0.000000 0.001529
+vt 0.498471 0.500000
+vt 0.500000 0.001529
+vt 0.001529 0.500000
+vn -0.000000 1.000000 0.000000
+vn 0.000000 -0.000000 -1.000000
+vn 1.000000 0.000000 0.000000
+s off
+f 1/1/1 4/2/1 3/3/1
+f 2/4/2 3/5/2 6/6/2
+f 3/7/3 4/8/3 7/9/3
+f 2/10/1 1/1/1 3/3/1
+f 5/11/2 2/4/2 6/6/2
+f 6/12/3 3/7/3 7/9/3
diff --git a/src/datavis3d/engine/meshes/backgroudSmooth.obj b/src/datavis3d/engine/meshes/backgroudSmooth.obj
new file mode 100644
index 00000000..ad16d904
--- /dev/null
+++ b/src/datavis3d/engine/meshes/backgroudSmooth.obj
@@ -0,0 +1,36 @@
+# Blender v2.66 (sub 0) OBJ File: 'backgroud.blend'
+# www.blender.org
+o Cube
+v 1.000000 -1.000000 -1.000000
+v 1.000000 -1.000000 1.000000
+v -1.000000 -1.000000 1.000000
+v -1.000000 -1.000000 -1.000000
+v 0.999999 1.000000 1.000001
+v -1.000000 1.000000 1.000000
+v -1.000000 1.000000 -1.000000
+vt 0.000000 0.501529
+vt 0.001529 1.000000
+vt 0.500000 0.998471
+vt 0.501529 0.500000
+vt 1.000000 0.498471
+vt 0.998471 0.000000
+vt 0.500000 0.498471
+vt 0.498471 0.000000
+vt 0.000000 0.001529
+vt 0.498471 0.500000
+vt 0.500000 0.001529
+vt 0.001529 0.500000
+vn 0.000000 0.999969 0.000000
+vn 0.707083 0.707083 0.000000
+vn 0.577349 0.577349 -0.577349
+vn 0.000000 0.707083 -0.707083
+vn 0.707083 0.000000 -0.707083
+vn 0.999969 0.000000 0.000000
+vn 0.000000 0.000000 -1.000000
+s 1
+f 1/1/1 4/2/2 3/3/3
+f 2/4/4 3/5/3 6/6/5
+f 3/7/3 4/8/2 7/9/6
+f 2/10/4 1/1/1 3/3/3
+f 5/11/7 2/4/4 6/6/5
+f 6/12/5 3/7/3 7/9/6
diff --git a/src/datavis3d/engine/meshes/coneFlat.obj b/src/datavis3d/engine/meshes/coneFlat.obj
new file mode 100644
index 00000000..51c3821e
--- /dev/null
+++ b/src/datavis3d/engine/meshes/coneFlat.obj
@@ -0,0 +1,89 @@
+# Blender v2.66 (sub 0) OBJ File: 'cone.blend'
+# www.blender.org
+o Cone_Cone.001
+v 0.000000 -1.000000 -1.000000
+v 0.309017 -1.000000 -0.951057
+v 0.587785 -1.000000 -0.809017
+v 0.809017 -1.000000 -0.587785
+v 0.951057 -1.000000 -0.309017
+v 1.000000 -1.000000 0.000000
+v 0.951056 -1.000000 0.309017
+v 0.809017 -1.000000 0.587785
+v 0.000000 1.000000 0.000000
+v 0.587785 -1.000000 0.809017
+v 0.309017 -1.000000 0.951057
+v -0.000000 -1.000000 1.000000
+v -0.309017 -1.000000 0.951056
+v -0.587786 -1.000000 0.809017
+v -0.809017 -1.000000 0.587785
+v -0.951057 -1.000000 0.309016
+v -1.000000 -1.000000 -0.000001
+v -0.951056 -1.000000 -0.309018
+v -0.809016 -1.000000 -0.587786
+v -0.587784 -1.000000 -0.809018
+v -0.309016 -1.000000 -0.951057
+vt 0.018984 0.308330
+vt 0.500000 0.482045
+vt 0.000000 0.410924
+vt 0.011213 0.505476
+vt 0.051524 0.582730
+vt 0.116989 0.635124
+vt 0.066306 0.207736
+vt 0.137334 0.118990
+vt 0.225115 0.050777
+vt 0.321057 0.009776
+vt 0.415768 0.000000
+vt 0.499978 0.022406
+vt 0.551525 0.582730
+vt 1.000000 0.482045
+vt 0.616989 0.635125
+vt 0.511213 0.505476
+vt 0.500000 0.410924
+vt 0.518984 0.308330
+vt 0.566306 0.207736
+vt 0.637334 0.118990
+vt 0.725115 0.050777
+vt 0.821057 0.009776
+vt 0.915768 0.000000
+vt 0.999978 0.022406
+vn -0.407058 0.442793 -0.798898
+vn 0.140263 0.442793 -0.885585
+vn -0.140262 0.442793 -0.885585
+vn 0.407059 0.442793 -0.798898
+vn -0.634008 0.442793 -0.634010
+vn -0.798897 0.442793 -0.407060
+vn -0.885585 0.442793 -0.140264
+vn -0.885585 0.442793 0.140262
+vn -0.798898 0.442793 0.407058
+vn -0.634009 0.442793 0.634009
+vn -0.407059 0.442793 0.798898
+vn -0.140263 0.442793 0.885585
+vn 0.140263 0.442793 0.885585
+vn 0.407059 0.442793 0.798898
+vn 0.634009 0.442793 0.634009
+vn 0.798898 0.442793 0.407059
+vn 0.885585 0.442793 0.140263
+vn 0.885585 0.442793 -0.140263
+vn 0.798898 0.442793 -0.407059
+vn 0.634009 0.442793 -0.634009
+s off
+f 20/1/1 9/2/1 21/3/1
+f 1/4/2 9/2/2 2/5/2
+f 21/3/3 9/2/3 1/4/3
+f 2/5/4 9/2/4 3/6/4
+f 19/7/5 9/2/5 20/1/5
+f 18/8/6 9/2/6 19/7/6
+f 17/9/7 9/2/7 18/8/7
+f 16/10/8 9/2/8 17/9/8
+f 15/11/9 9/2/9 16/10/9
+f 14/12/10 9/2/10 15/11/10
+f 13/13/11 9/14/11 14/15/11
+f 12/16/12 9/14/12 13/13/12
+f 11/17/13 9/14/13 12/16/13
+f 10/18/14 9/14/14 11/17/14
+f 8/19/15 9/14/15 10/18/15
+f 7/20/16 9/14/16 8/19/16
+f 6/21/17 9/14/17 7/20/17
+f 5/22/18 9/14/18 6/21/18
+f 4/23/19 9/14/19 5/22/19
+f 3/24/20 9/14/20 4/23/20
diff --git a/src/datavis3d/engine/meshes/coneSmooth.obj b/src/datavis3d/engine/meshes/coneSmooth.obj
new file mode 100644
index 00000000..48c48ba8
--- /dev/null
+++ b/src/datavis3d/engine/meshes/coneSmooth.obj
@@ -0,0 +1,90 @@
+# Blender v2.66 (sub 0) OBJ File: 'cone.blend'
+# www.blender.org
+o Cone_Cone.001
+v 0.000000 -1.000000 -1.000000
+v 0.309017 -1.000000 -0.951057
+v 0.587785 -1.000000 -0.809017
+v 0.809017 -1.000000 -0.587785
+v 0.951057 -1.000000 -0.309017
+v 1.000000 -1.000000 0.000000
+v 0.951056 -1.000000 0.309017
+v 0.809017 -1.000000 0.587785
+v 0.000000 1.000000 0.000000
+v 0.587785 -1.000000 0.809017
+v 0.309017 -1.000000 0.951057
+v -0.000000 -1.000000 1.000000
+v -0.309017 -1.000000 0.951056
+v -0.587786 -1.000000 0.809017
+v -0.809017 -1.000000 0.587785
+v -0.951057 -1.000000 0.309016
+v -1.000000 -1.000000 -0.000001
+v -0.951056 -1.000000 -0.309018
+v -0.809016 -1.000000 -0.587786
+v -0.587784 -1.000000 -0.809018
+v -0.309016 -1.000000 -0.951057
+vt 0.018984 0.308330
+vt 0.500000 0.482045
+vt 0.000000 0.410924
+vt 0.011213 0.505476
+vt 0.051524 0.582730
+vt 0.116989 0.635124
+vt 0.066306 0.207736
+vt 0.137334 0.118990
+vt 0.225115 0.050777
+vt 0.321057 0.009776
+vt 0.415768 0.000000
+vt 0.499978 0.022406
+vt 0.551525 0.582730
+vt 1.000000 0.482045
+vt 0.616989 0.635125
+vt 0.511213 0.505476
+vt 0.500000 0.410924
+vt 0.518984 0.308330
+vt 0.566306 0.207736
+vt 0.637334 0.118990
+vt 0.725115 0.050777
+vt 0.821057 0.009776
+vt 0.915768 0.000000
+vt 0.999978 0.022406
+vn -0.525712 0.447188 -0.723594
+vn 0.000000 1.000000 0.000000
+vn -0.276376 0.447188 -0.850642
+vn 0.000000 0.447188 -0.894406
+vn 0.276376 0.447188 -0.850642
+vn 0.525712 0.447188 -0.723594
+vn -0.723594 0.447188 -0.525712
+vn -0.850642 0.447188 -0.276376
+vn -0.894406 0.447188 0.000000
+vn -0.850642 0.447188 0.276376
+vn -0.723594 0.447188 0.525712
+vn -0.525712 0.447188 0.723594
+vn -0.276376 0.447188 0.850642
+vn 0.000000 0.447188 0.894406
+vn 0.276376 0.447188 0.850642
+vn 0.525712 0.447188 0.723594
+vn 0.723594 0.447188 0.525712
+vn 0.850642 0.447188 0.276376
+vn 0.894406 0.447188 0.000000
+vn 0.850642 0.447188 -0.276376
+vn 0.723594 0.447188 -0.525712
+s 1
+f 20/1/1 9/2/2 21/3/3
+f 1/4/4 9/2/2 2/5/5
+f 21/3/3 9/2/2 1/4/4
+f 2/5/5 9/2/2 3/6/6
+f 19/7/7 9/2/2 20/1/1
+f 18/8/8 9/2/2 19/7/7
+f 17/9/9 9/2/2 18/8/8
+f 16/10/10 9/2/2 17/9/9
+f 15/11/11 9/2/2 16/10/10
+f 14/12/12 9/2/2 15/11/11
+f 13/13/13 9/14/2 14/15/12
+f 12/16/14 9/14/2 13/13/13
+f 11/17/15 9/14/2 12/16/14
+f 10/18/16 9/14/2 11/17/15
+f 8/19/17 9/14/2 10/18/16
+f 7/20/18 9/14/2 8/19/17
+f 6/21/19 9/14/2 7/20/18
+f 5/22/20 9/14/2 6/21/19
+f 4/23/21 9/14/2 5/22/20
+f 3/24/6 9/14/2 4/23/21
diff --git a/src/datavis3d/engine/meshes/cubeFlat.obj b/src/datavis3d/engine/meshes/cubeFlat.obj
new file mode 100644
index 00000000..3c8d6d0a
--- /dev/null
+++ b/src/datavis3d/engine/meshes/cubeFlat.obj
@@ -0,0 +1,47 @@
+# Blender v2.66 (sub 0) OBJ File: 'cube.blend'
+# www.blender.org
+o Cube
+v -1.000000 -1.000000 1.000000
+v -1.000000 -1.000000 -1.000000
+v 1.000000 -1.000000 -1.000000
+v 1.000000 -1.000000 1.000000
+v -1.000000 1.000000 1.000000
+v -1.000000 1.000000 -1.000000
+v 1.000000 1.000000 -1.000000
+v 1.000000 1.000000 1.000000
+vt 0.998999 0.334334
+vt 0.667668 0.334334
+vt 0.998999 0.665666
+vt 0.332332 0.001001
+vt 0.001001 0.001001
+vt 0.332332 0.332332
+vt 0.332332 0.334334
+vt 0.001001 0.334334
+vt 0.001001 0.665666
+vt 0.665666 0.001001
+vt 0.334334 0.001001
+vt 0.334334 0.332332
+vt 0.665666 0.334334
+vt 0.334334 0.334334
+vt 0.334334 0.665666
+vt 0.667668 0.665666
+vt 0.001001 0.332332
+vt 0.332332 0.665666
+vt 0.665666 0.332332
+vt 0.665666 0.665666
+vn -1.000000 0.000000 0.000000
+vn 0.000000 0.000000 -1.000000
+vn 1.000000 -0.000000 0.000000
+vn 0.000000 0.000000 1.000000
+vn 0.000000 1.000000 0.000000
+s off
+f 5/1/1 6/2/1 1/3/1
+f 6/4/2 7/5/2 2/6/2
+f 7/7/3 8/8/3 4/9/3
+f 8/10/4 5/11/4 1/12/4
+f 8/13/5 7/14/5 6/15/5
+f 6/2/1 2/16/1 1/3/1
+f 7/5/2 3/17/2 2/6/2
+f 3/18/3 7/7/3 4/9/3
+f 4/19/4 8/10/4 1/12/4
+f 5/20/5 8/13/5 6/15/5
diff --git a/src/datavis3d/engine/meshes/cubeSmooth.obj b/src/datavis3d/engine/meshes/cubeSmooth.obj
new file mode 100644
index 00000000..9d147bfd
--- /dev/null
+++ b/src/datavis3d/engine/meshes/cubeSmooth.obj
@@ -0,0 +1,50 @@
+# Blender v2.66 (sub 0) OBJ File: 'cube.blend'
+# www.blender.org
+o Cube
+v -1.000000 -1.000000 1.000000
+v -1.000000 -1.000000 -1.000000
+v 1.000000 -1.000000 -1.000000
+v 1.000000 -1.000000 1.000000
+v -1.000000 1.000000 1.000000
+v -1.000000 1.000000 -1.000000
+v 1.000000 1.000000 -1.000000
+v 1.000000 1.000000 1.000000
+vt 0.998999 0.334334
+vt 0.667668 0.334334
+vt 0.998999 0.665666
+vt 0.332332 0.001001
+vt 0.001001 0.001001
+vt 0.332332 0.332332
+vt 0.332332 0.334334
+vt 0.001001 0.334334
+vt 0.001001 0.665666
+vt 0.665666 0.001001
+vt 0.334334 0.001001
+vt 0.334334 0.332332
+vt 0.665666 0.334334
+vt 0.334334 0.334334
+vt 0.334334 0.665666
+vt 0.667668 0.665666
+vt 0.001001 0.332332
+vt 0.332332 0.665666
+vt 0.665666 0.332332
+vt 0.665666 0.665666
+vn -0.577349 0.577349 0.577349
+vn -0.577349 0.577349 -0.577349
+vn -0.707083 0.000000 0.707083
+vn 0.577349 0.577349 -0.577349
+vn -0.707083 0.000000 -0.707083
+vn 0.577349 0.577349 0.577349
+vn 0.707083 0.000000 0.707083
+vn 0.707083 0.000000 -0.707083
+s 1
+f 5/1/1 6/2/2 1/3/3
+f 6/4/2 7/5/4 2/6/5
+f 7/7/4 8/8/6 4/9/7
+f 8/10/6 5/11/1 1/12/3
+f 8/13/6 7/14/4 6/15/2
+f 6/2/2 2/16/5 1/3/3
+f 7/5/4 3/17/8 2/6/5
+f 3/18/8 7/7/4 4/9/7
+f 4/19/7 8/10/6 1/12/3
+f 5/20/1 8/13/6 6/15/2
diff --git a/src/datavis3d/engine/meshes/cylinderFlat.obj b/src/datavis3d/engine/meshes/cylinderFlat.obj
new file mode 100644
index 00000000..2b7e3e5e
--- /dev/null
+++ b/src/datavis3d/engine/meshes/cylinderFlat.obj
@@ -0,0 +1,299 @@
+# Blender v2.66 (sub 0) OBJ File: 'cylinder.blend'
+# www.blender.org
+o Cylinder
+v 0.000000 -1.000000 -1.000000
+v 0.000000 1.000000 -1.000000
+v 0.195090 -1.000000 -0.980785
+v 0.195090 1.000000 -0.980785
+v 0.382683 -1.000000 -0.923880
+v 0.382683 1.000000 -0.923880
+v 0.555570 -1.000000 -0.831470
+v 0.555570 1.000000 -0.831470
+v 0.707107 -1.000000 -0.707107
+v 0.707107 1.000000 -0.707107
+v 0.831470 -1.000000 -0.555570
+v 0.831470 1.000000 -0.555570
+v 0.923880 -1.000000 -0.382683
+v 0.923880 1.000000 -0.382683
+v 0.980785 -1.000000 -0.195090
+v 0.980785 1.000000 -0.195090
+v 1.000000 -1.000000 -0.000000
+v 1.000000 1.000000 -0.000000
+v 0.980785 -1.000000 0.195090
+v 0.980785 1.000000 0.195090
+v 0.923880 -1.000000 0.382683
+v 0.923880 1.000000 0.382683
+v 0.831470 -1.000000 0.555570
+v 0.831470 1.000000 0.555570
+v 0.707107 -1.000000 0.707107
+v 0.707107 1.000000 0.707107
+v 0.555570 -1.000000 0.831470
+v 0.555570 1.000000 0.831470
+v 0.382683 -1.000000 0.923880
+v 0.382683 1.000000 0.923880
+v 0.195090 -1.000000 0.980785
+v 0.195090 1.000000 0.980785
+v -0.000000 -1.000000 1.000000
+v -0.000000 1.000000 1.000000
+v -0.195091 -1.000000 0.980785
+v -0.195091 1.000000 0.980785
+v -0.382684 -1.000000 0.923879
+v -0.382684 1.000000 0.923879
+v -0.555571 -1.000000 0.831469
+v -0.555571 1.000000 0.831469
+v -0.707107 -1.000000 0.707106
+v -0.707107 1.000000 0.707106
+v -0.831470 -1.000000 0.555570
+v -0.831470 1.000000 0.555570
+v -0.923880 -1.000000 0.382683
+v -0.923880 1.000000 0.382683
+v -0.980785 -1.000000 0.195089
+v -0.980785 1.000000 0.195089
+v -1.000000 -1.000000 -0.000001
+v -1.000000 1.000000 -0.000001
+v -0.980785 -1.000000 -0.195091
+v -0.980785 1.000000 -0.195091
+v -0.923879 -1.000000 -0.382684
+v -0.923879 1.000000 -0.382684
+v -0.831469 -1.000000 -0.555571
+v -0.831469 1.000000 -0.555571
+v -0.707106 -1.000000 -0.707108
+v -0.707106 1.000000 -0.707108
+v -0.555569 -1.000000 -0.831470
+v -0.555569 1.000000 -0.831470
+v -0.382682 -1.000000 -0.923880
+v -0.382682 1.000000 -0.923880
+v -0.195089 -1.000000 -0.980786
+v -0.195089 1.000000 -0.980786
+vt 0.289718 0.879351
+vt 0.288367 0.438844
+vt 0.330714 0.438714
+vt 0.332066 0.879221
+vt 0.370605 0.438592
+vt 0.371956 0.879099
+vt 0.406505 0.438482
+vt 0.407857 0.878988
+vt 0.437036 0.438388
+vt 0.778904 0.000000
+vt 0.780256 0.440507
+vt 0.749725 0.440601
+vt 0.748373 0.000094
+vt 0.713824 0.440711
+vt 0.712473 0.000204
+vt 0.673934 0.440833
+vt 0.672582 0.000326
+vt 0.631586 0.440963
+vt 0.630235 0.000456
+vt 0.588409 0.441095
+vt 0.587057 0.000588
+vt 0.546061 0.441225
+vt 0.544710 0.000718
+vt 0.506171 0.441348
+vt 0.504819 0.000841
+vt 0.470270 0.441458
+vt 0.468919 0.000951
+vt 0.439739 0.441552
+vt 0.720545 0.882916
+vt 0.719194 0.442409
+vt 0.755094 0.442299
+vt 0.756446 0.882806
+vt 0.794985 0.442176
+vt 0.796336 0.882683
+vt 0.837333 0.442046
+vt 0.838684 0.882553
+vt 0.881861 0.882421
+vt 0.880510 0.441914
+vt 0.924209 0.882291
+vt 0.922857 0.441784
+vt 0.964099 0.882168
+vt 0.962748 0.441662
+vt 1.000000 0.882058
+vt 0.717842 0.441552
+vt 0.719194 0.882058
+vt 0.681942 0.441662
+vt 0.683293 0.882169
+vt 0.642051 0.441784
+vt 0.643403 0.882291
+vt 0.599704 0.441914
+vt 0.601055 0.882421
+vt 0.556526 0.442046
+vt 0.557878 0.882553
+vt 0.514179 0.442176
+vt 0.515530 0.882683
+vt 0.474288 0.442299
+vt 0.475640 0.882806
+vt 0.438388 0.442409
+vt 0.097872 0.879939
+vt 0.096520 0.439433
+vt 0.128403 0.879846
+vt 0.127051 0.439339
+vt 0.164303 0.879735
+vt 0.162952 0.439229
+vt 0.204194 0.879613
+vt 0.000000 0.197605
+vt 0.008423 0.155257
+vt 0.000000 0.240783
+vt 0.246541 0.879483
+vt 0.245190 0.438976
+vt 0.202842 0.439106
+vt 0.438388 0.878895
+vt 0.438388 0.001045
+vt 0.998649 0.441552
+vt 0.439739 0.882916
+vt 0.024947 0.115367
+vt 0.048935 0.079466
+vt 0.079466 0.048935
+vt 0.115366 0.024947
+vt 0.155257 0.008424
+vt 0.197605 0.000000
+vt 0.240782 0.000000
+vt 0.283130 0.008423
+vt 0.323021 0.024947
+vt 0.358922 0.048935
+vt 0.389453 0.079466
+vt 0.413441 0.115367
+vt 0.429964 0.155257
+vt 0.438388 0.197605
+vt 0.438388 0.240783
+vt 0.429964 0.283130
+vt 0.413441 0.323021
+vt 0.389453 0.358922
+vt 0.358922 0.389453
+vt 0.323021 0.413441
+vt 0.283130 0.429964
+vt 0.240783 0.438388
+vt 0.197605 0.438388
+vt 0.155257 0.429964
+vt 0.115367 0.413441
+vt 0.079466 0.389453
+vt 0.048935 0.358922
+vt 0.024947 0.323021
+vt 0.008423 0.283130
+vn 0.098017 0.000000 -0.995185
+vn 0.290285 0.000000 -0.956940
+vn 0.471397 0.000000 -0.881921
+vn 0.634393 0.000000 -0.773010
+vn 0.773010 0.000000 -0.634393
+vn 0.881921 0.000000 -0.471397
+vn 0.956940 0.000000 -0.290285
+vn 0.995185 0.000000 -0.098017
+vn 0.995185 0.000000 0.098017
+vn 0.956940 0.000000 0.290285
+vn 0.881921 0.000000 0.471396
+vn 0.773010 0.000000 0.634393
+vn 0.634393 0.000000 0.773010
+vn 0.471397 0.000000 0.881921
+vn 0.290284 0.000000 0.956940
+vn 0.098017 0.000000 0.995185
+vn -0.098018 0.000000 0.995185
+vn -0.290285 0.000000 0.956940
+vn -0.471397 0.000000 0.881921
+vn -0.634394 0.000000 0.773010
+vn -0.773011 0.000000 0.634393
+vn -0.881922 0.000000 0.471396
+vn -0.956941 0.000000 0.290284
+vn -0.995185 0.000000 0.098016
+vn -0.995185 -0.000000 -0.098018
+vn -0.956940 -0.000000 -0.290286
+vn -0.881921 -0.000000 -0.471398
+vn -0.773010 -0.000000 -0.634394
+vn -0.634392 -0.000000 -0.773011
+vn -0.471395 -0.000000 -0.881922
+vn -0.000000 1.000000 0.000000
+vn -0.098017 -0.000000 -0.995185
+vn -0.290283 -0.000000 -0.956941
+s off
+f 1/1/1 2/2/1 4/3/1
+f 3/4/2 4/3/2 6/5/2
+f 5/6/3 6/5/3 8/7/3
+f 7/8/4 8/7/4 10/9/4
+f 9/10/5 10/11/5 12/12/5
+f 11/13/6 12/12/6 14/14/6
+f 13/15/7 14/14/7 16/16/7
+f 15/17/8 16/16/8 18/18/8
+f 17/19/9 18/18/9 20/20/9
+f 19/21/10 20/20/10 22/22/10
+f 21/23/11 22/22/11 24/24/11
+f 23/25/12 24/24/12 26/26/12
+f 25/27/13 26/26/13 28/28/13
+f 27/29/14 28/30/14 30/31/14
+f 29/32/15 30/31/15 32/33/15
+f 31/34/16 32/33/16 34/35/16
+f 33/36/17 34/35/17 35/37/17
+f 35/37/18 36/38/18 37/39/18
+f 37/39/19 38/40/19 39/41/19
+f 39/41/20 40/42/20 41/43/20
+f 41/44/21 42/45/21 43/46/21
+f 43/46/22 44/47/22 45/48/22
+f 45/48/23 46/49/23 47/50/23
+f 47/50/24 48/51/24 49/52/24
+f 49/52/25 50/53/25 51/54/25
+f 51/54/26 52/55/26 53/56/26
+f 53/56/27 54/57/27 55/58/27
+f 55/59/28 56/60/28 57/61/28
+f 57/61/29 58/62/29 59/63/29
+f 59/63/30 60/64/30 61/65/30
+f 4/66/31 2/67/31 6/68/31
+f 63/69/32 64/70/32 1/1/32
+f 61/65/33 62/71/33 63/69/33
+f 3/4/1 1/1/1 4/3/1
+f 5/6/2 3/4/2 6/5/2
+f 7/8/3 5/6/3 8/7/3
+f 9/72/4 7/8/4 10/9/4
+f 11/13/5 9/10/5 12/12/5
+f 13/15/6 11/13/6 14/14/6
+f 15/17/7 13/15/7 16/16/7
+f 17/19/8 15/17/8 18/18/8
+f 19/21/9 17/19/9 20/20/9
+f 21/23/10 19/21/10 22/22/10
+f 23/25/11 21/23/11 24/24/11
+f 25/27/12 23/25/12 26/26/12
+f 27/73/13 25/27/13 28/28/13
+f 29/32/14 27/29/14 30/31/14
+f 31/34/15 29/32/15 32/33/15
+f 33/36/16 31/34/16 34/35/16
+f 34/35/17 36/38/17 35/37/17
+f 36/38/18 38/40/18 37/39/18
+f 38/40/19 40/42/19 39/41/19
+f 40/42/20 42/74/20 41/43/20
+f 42/45/21 44/47/21 43/46/21
+f 44/47/22 46/49/22 45/48/22
+f 46/49/23 48/51/23 47/50/23
+f 48/51/24 50/53/24 49/52/24
+f 50/53/25 52/55/25 51/54/25
+f 52/55/26 54/57/26 53/56/26
+f 54/57/27 56/75/27 55/58/27
+f 56/60/28 58/62/28 57/61/28
+f 58/62/29 60/64/29 59/63/29
+f 60/64/30 62/71/30 61/65/30
+f 2/67/31 64/76/31 6/68/31
+f 64/76/31 62/77/31 6/68/31
+f 62/77/31 60/78/31 6/68/31
+f 60/78/31 58/79/31 6/68/31
+f 58/79/31 56/80/31 6/68/31
+f 56/80/31 54/81/31 6/68/31
+f 54/81/31 52/82/31 6/68/31
+f 52/82/31 50/83/31 6/68/31
+f 50/83/31 48/84/31 6/68/31
+f 48/84/31 46/85/31 6/68/31
+f 46/85/31 44/86/31 6/68/31
+f 44/86/31 42/87/31 6/68/31
+f 42/87/31 40/88/31 6/68/31
+f 40/88/31 38/89/31 6/68/31
+f 38/89/31 36/90/31 6/68/31
+f 36/90/31 34/91/31 6/68/31
+f 34/91/31 32/92/31 6/68/31
+f 32/92/31 30/93/31 6/68/31
+f 30/93/31 28/94/31 6/68/31
+f 28/94/31 26/95/31 6/68/31
+f 26/95/31 24/96/31 6/68/31
+f 24/96/31 22/97/31 6/68/31
+f 22/97/31 20/98/31 6/68/31
+f 20/98/31 18/99/31 6/68/31
+f 18/99/31 16/100/31 6/68/31
+f 16/100/31 14/101/31 6/68/31
+f 14/101/31 12/102/31 6/68/31
+f 12/102/31 10/103/31 8/104/31
+f 6/68/31 12/102/31 8/104/31
+f 64/70/32 2/2/32 1/1/32
+f 62/71/33 64/70/33 63/69/33
diff --git a/src/datavis3d/engine/meshes/cylinderSmooth.obj b/src/datavis3d/engine/meshes/cylinderSmooth.obj
new file mode 100644
index 00000000..6ccbb286
--- /dev/null
+++ b/src/datavis3d/engine/meshes/cylinderSmooth.obj
@@ -0,0 +1,330 @@
+# Blender v2.66 (sub 0) OBJ File: 'cylinder.blend'
+# www.blender.org
+o Cylinder
+v 0.000000 -1.000000 -1.000000
+v 0.000000 1.000000 -1.000000
+v 0.195090 -1.000000 -0.980785
+v 0.195090 1.000000 -0.980785
+v 0.382683 -1.000000 -0.923880
+v 0.382683 1.000000 -0.923880
+v 0.555570 -1.000000 -0.831470
+v 0.555570 1.000000 -0.831470
+v 0.707107 -1.000000 -0.707107
+v 0.707107 1.000000 -0.707107
+v 0.831470 -1.000000 -0.555570
+v 0.831470 1.000000 -0.555570
+v 0.923880 -1.000000 -0.382683
+v 0.923880 1.000000 -0.382683
+v 0.980785 -1.000000 -0.195090
+v 0.980785 1.000000 -0.195090
+v 1.000000 -1.000000 -0.000000
+v 1.000000 1.000000 -0.000000
+v 0.980785 -1.000000 0.195090
+v 0.980785 1.000000 0.195090
+v 0.923880 -1.000000 0.382683
+v 0.923880 1.000000 0.382683
+v 0.831470 -1.000000 0.555570
+v 0.831470 1.000000 0.555570
+v 0.707107 -1.000000 0.707107
+v 0.707107 1.000000 0.707107
+v 0.555570 -1.000000 0.831470
+v 0.555570 1.000000 0.831470
+v 0.382683 -1.000000 0.923880
+v 0.382683 1.000000 0.923880
+v 0.195090 -1.000000 0.980785
+v 0.195090 1.000000 0.980785
+v -0.000000 -1.000000 1.000000
+v -0.000000 1.000000 1.000000
+v -0.195091 -1.000000 0.980785
+v -0.195091 1.000000 0.980785
+v -0.382684 -1.000000 0.923879
+v -0.382684 1.000000 0.923879
+v -0.555571 -1.000000 0.831469
+v -0.555571 1.000000 0.831469
+v -0.707107 -1.000000 0.707106
+v -0.707107 1.000000 0.707106
+v -0.831470 -1.000000 0.555570
+v -0.831470 1.000000 0.555570
+v -0.923880 -1.000000 0.382683
+v -0.923880 1.000000 0.382683
+v -0.980785 -1.000000 0.195089
+v -0.980785 1.000000 0.195089
+v -1.000000 -1.000000 -0.000001
+v -1.000000 1.000000 -0.000001
+v -0.980785 -1.000000 -0.195091
+v -0.980785 1.000000 -0.195091
+v -0.923879 -1.000000 -0.382684
+v -0.923879 1.000000 -0.382684
+v -0.831469 -1.000000 -0.555571
+v -0.831469 1.000000 -0.555571
+v -0.707106 -1.000000 -0.707108
+v -0.707106 1.000000 -0.707108
+v -0.555569 -1.000000 -0.831470
+v -0.555569 1.000000 -0.831470
+v -0.382682 -1.000000 -0.923880
+v -0.382682 1.000000 -0.923880
+v -0.195089 -1.000000 -0.980786
+v -0.195089 1.000000 -0.980786
+vt 0.289718 0.879351
+vt 0.288367 0.438844
+vt 0.330714 0.438714
+vt 0.332066 0.879221
+vt 0.370605 0.438592
+vt 0.371956 0.879099
+vt 0.406505 0.438482
+vt 0.407857 0.878988
+vt 0.437036 0.438388
+vt 0.778904 0.000000
+vt 0.780256 0.440507
+vt 0.749725 0.440601
+vt 0.748373 0.000094
+vt 0.713824 0.440711
+vt 0.712473 0.000204
+vt 0.673934 0.440833
+vt 0.672582 0.000326
+vt 0.631586 0.440963
+vt 0.630235 0.000456
+vt 0.588409 0.441095
+vt 0.587057 0.000588
+vt 0.546061 0.441225
+vt 0.544710 0.000718
+vt 0.506171 0.441348
+vt 0.504819 0.000841
+vt 0.470270 0.441458
+vt 0.468919 0.000951
+vt 0.439739 0.441552
+vt 0.720545 0.882916
+vt 0.719194 0.442409
+vt 0.755094 0.442299
+vt 0.756446 0.882806
+vt 0.794985 0.442176
+vt 0.796336 0.882683
+vt 0.837333 0.442046
+vt 0.838684 0.882553
+vt 0.881861 0.882421
+vt 0.880510 0.441914
+vt 0.924209 0.882291
+vt 0.922857 0.441784
+vt 0.964099 0.882168
+vt 0.962748 0.441662
+vt 1.000000 0.882058
+vt 0.717842 0.441552
+vt 0.719194 0.882058
+vt 0.681942 0.441662
+vt 0.683293 0.882169
+vt 0.642051 0.441784
+vt 0.643403 0.882291
+vt 0.599704 0.441914
+vt 0.601055 0.882421
+vt 0.556526 0.442046
+vt 0.557878 0.882553
+vt 0.514179 0.442176
+vt 0.515530 0.882683
+vt 0.474288 0.442299
+vt 0.475640 0.882806
+vt 0.438388 0.442409
+vt 0.097872 0.879939
+vt 0.096520 0.439433
+vt 0.128403 0.879846
+vt 0.127051 0.439339
+vt 0.164303 0.879735
+vt 0.162952 0.439229
+vt 0.204194 0.879613
+vt 0.000000 0.197605
+vt 0.008423 0.155257
+vt 0.000000 0.240783
+vt 0.246541 0.879483
+vt 0.245190 0.438976
+vt 0.202842 0.439106
+vt 0.438388 0.878895
+vt 0.438388 0.001045
+vt 0.998649 0.441552
+vt 0.439739 0.882916
+vt 0.024947 0.115367
+vt 0.048935 0.079466
+vt 0.079466 0.048935
+vt 0.115366 0.024947
+vt 0.155257 0.008424
+vt 0.197605 0.000000
+vt 0.240782 0.000000
+vt 0.283130 0.008423
+vt 0.323021 0.024947
+vt 0.358922 0.048935
+vt 0.389453 0.079466
+vt 0.413441 0.115367
+vt 0.429964 0.155257
+vt 0.438388 0.197605
+vt 0.438388 0.240783
+vt 0.429964 0.283130
+vt 0.413441 0.323021
+vt 0.389453 0.358922
+vt 0.358922 0.389453
+vt 0.323021 0.413441
+vt 0.283130 0.429964
+vt 0.240783 0.438388
+vt 0.197605 0.438388
+vt 0.155257 0.429964
+vt 0.115367 0.413441
+vt 0.079466 0.389453
+vt 0.048935 0.358922
+vt 0.024947 0.323021
+vt 0.008423 0.283130
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.685690 -0.727866
+vn 0.142003 0.685690 -0.713889
+vn 0.195074 0.000000 -0.980773
+vn 0.278542 0.685690 -0.672475
+vn 0.382672 0.000000 -0.923856
+vn 0.404370 0.685690 -0.605213
+vn 0.555559 0.000000 -0.831446
+vn 0.514664 0.685690 -0.514664
+vn 0.707083 0.000000 -0.707083
+vn 0.605213 0.685690 -0.404370
+vn 0.831446 0.000000 -0.555559
+vn 0.672475 0.685690 -0.278542
+vn 0.923856 0.000000 -0.382672
+vn 0.713889 0.685690 -0.142003
+vn 0.980773 0.000000 -0.195074
+vn 0.727866 0.685690 0.000000
+vn 1.000000 0.000000 0.000000
+vn 0.713889 0.685690 0.142003
+vn 0.980773 0.000000 0.195074
+vn 0.672475 0.685690 0.278542
+vn 0.923856 0.000000 0.382672
+vn 0.605213 0.685690 0.404370
+vn 0.831446 0.000000 0.555559
+vn 0.514664 0.685690 0.514664
+vn 0.707083 0.000000 0.707083
+vn 0.404370 0.685690 0.605213
+vn 0.555559 0.000000 0.831446
+vn 0.278542 0.685690 0.672475
+vn 0.382672 0.000000 0.923856
+vn 0.142003 0.685690 0.713889
+vn 0.195074 0.000000 0.980773
+vn 0.000000 0.685690 0.727866
+vn 0.000000 0.000000 0.999969
+vn -0.195074 0.000000 0.980773
+vn -0.142003 0.685690 0.713889
+vn -0.382672 0.000000 0.923856
+vn -0.278542 0.685690 0.672475
+vn -0.555559 0.000000 0.831446
+vn -0.404370 0.685690 0.605213
+vn -0.707083 0.000000 0.707083
+vn -0.514664 0.685690 0.514664
+vn -0.831446 0.000000 0.555559
+vn -0.605213 0.685690 0.404370
+vn -0.923856 0.000000 0.382672
+vn -0.672475 0.685690 0.278542
+vn -0.980773 0.000000 0.195074
+vn -0.713889 0.685690 0.142003
+vn -1.000000 0.000000 0.000000
+vn -0.727866 0.685690 0.000000
+vn -0.980773 0.000000 -0.195074
+vn -0.713889 0.685690 -0.142003
+vn -0.923856 0.000000 -0.382672
+vn -0.672475 0.685690 -0.278542
+vn -0.831446 0.000000 -0.555559
+vn -0.605213 0.685690 -0.404370
+vn -0.707083 0.000000 -0.707083
+vn -0.514664 0.685690 -0.514695
+vn -0.555559 0.000000 -0.831446
+vn -0.404370 0.685690 -0.605213
+vn -0.382672 0.000000 -0.923856
+vn -0.195074 0.000000 -0.980773
+vn -0.142003 0.685690 -0.713889
+vn -0.278542 0.685690 -0.672475
+s 1
+f 1/1/1 2/2/2 4/3/3
+f 3/4/4 4/3/3 6/5/5
+f 5/6/6 6/5/5 8/7/7
+f 7/8/8 8/7/7 10/9/9
+f 9/10/10 10/11/9 12/12/11
+f 11/13/12 12/12/11 14/14/13
+f 13/15/14 14/14/13 16/16/15
+f 15/17/16 16/16/15 18/18/17
+f 17/19/18 18/18/17 20/20/19
+f 19/21/20 20/20/19 22/22/21
+f 21/23/22 22/22/21 24/24/23
+f 23/25/24 24/24/23 26/26/25
+f 25/27/26 26/26/25 28/28/27
+f 27/29/28 28/30/27 30/31/29
+f 29/32/30 30/31/29 32/33/31
+f 31/34/32 32/33/31 34/35/33
+f 33/36/34 34/35/33 35/37/35
+f 35/37/35 36/38/36 37/39/37
+f 37/39/37 38/40/38 39/41/39
+f 39/41/39 40/42/40 41/43/41
+f 41/44/41 42/45/42 43/46/43
+f 43/46/43 44/47/44 45/48/45
+f 45/48/45 46/49/46 47/50/47
+f 47/50/47 48/51/48 49/52/49
+f 49/52/49 50/53/50 51/54/51
+f 51/54/51 52/55/52 53/56/53
+f 53/56/53 54/57/54 55/58/55
+f 55/59/55 56/60/56 57/61/57
+f 57/61/57 58/62/58 59/63/59
+f 59/63/59 60/64/60 61/65/61
+f 4/66/3 2/67/2 6/68/5
+f 63/69/62 64/70/63 1/1/1
+f 61/65/61 62/71/64 63/69/62
+f 3/4/4 1/1/1 4/3/3
+f 5/6/6 3/4/4 6/5/5
+f 7/8/8 5/6/6 8/7/7
+f 9/72/10 7/8/8 10/9/9
+f 11/13/12 9/10/10 12/12/11
+f 13/15/14 11/13/12 14/14/13
+f 15/17/16 13/15/14 16/16/15
+f 17/19/18 15/17/16 18/18/17
+f 19/21/20 17/19/18 20/20/19
+f 21/23/22 19/21/20 22/22/21
+f 23/25/24 21/23/22 24/24/23
+f 25/27/26 23/25/24 26/26/25
+f 27/73/28 25/27/26 28/28/27
+f 29/32/30 27/29/28 30/31/29
+f 31/34/32 29/32/30 32/33/31
+f 33/36/34 31/34/32 34/35/33
+f 34/35/33 36/38/36 35/37/35
+f 36/38/36 38/40/38 37/39/37
+f 38/40/38 40/42/40 39/41/39
+f 40/42/40 42/74/42 41/43/41
+f 42/45/42 44/47/44 43/46/43
+f 44/47/44 46/49/46 45/48/45
+f 46/49/46 48/51/48 47/50/47
+f 48/51/48 50/53/50 49/52/49
+f 50/53/50 52/55/52 51/54/51
+f 52/55/52 54/57/54 53/56/53
+f 54/57/54 56/75/56 55/58/55
+f 56/60/56 58/62/58 57/61/57
+f 58/62/58 60/64/60 59/63/59
+f 60/64/60 62/71/64 61/65/61
+f 2/67/2 64/76/63 6/68/5
+f 64/76/63 62/77/64 6/68/5
+f 62/77/64 60/78/60 6/68/5
+f 60/78/60 58/79/58 6/68/5
+f 58/79/58 56/80/56 6/68/5
+f 56/80/56 54/81/54 6/68/5
+f 54/81/54 52/82/52 6/68/5
+f 52/82/52 50/83/50 6/68/5
+f 50/83/50 48/84/48 6/68/5
+f 48/84/48 46/85/46 6/68/5
+f 46/85/46 44/86/44 6/68/5
+f 44/86/44 42/87/42 6/68/5
+f 42/87/42 40/88/40 6/68/5
+f 40/88/40 38/89/38 6/68/5
+f 38/89/38 36/90/36 6/68/5
+f 36/90/36 34/91/33 6/68/5
+f 34/91/33 32/92/31 6/68/5
+f 32/92/31 30/93/29 6/68/5
+f 30/93/29 28/94/27 6/68/5
+f 28/94/27 26/95/25 6/68/5
+f 26/95/25 24/96/23 6/68/5
+f 24/96/23 22/97/21 6/68/5
+f 22/97/21 20/98/19 6/68/5
+f 20/98/19 18/99/17 6/68/5
+f 18/99/17 16/100/15 6/68/5
+f 16/100/15 14/101/13 6/68/5
+f 14/101/13 12/102/11 6/68/5
+f 12/102/11 10/103/9 8/104/7
+f 6/68/5 12/102/11 8/104/7
+f 64/70/63 2/2/2 1/1/1
+f 62/71/64 64/70/63 63/69/62
diff --git a/src/datavis3d/engine/meshes/pyramidFlat.obj b/src/datavis3d/engine/meshes/pyramidFlat.obj
new file mode 100644
index 00000000..35edb477
--- /dev/null
+++ b/src/datavis3d/engine/meshes/pyramidFlat.obj
@@ -0,0 +1,22 @@
+# Blender v2.66 (sub 0) OBJ File: 'pyramid.blend'
+# www.blender.org
+o Cone_Cone.001
+v 1.000000 -1.000000 -0.999999
+v 0.999999 -1.000000 1.000000
+v -1.000000 -1.000000 0.999999
+v 0.000000 1.000000 0.000000
+v -0.999999 -1.000000 -1.000000
+vt 0.999900 0.000100
+vt 0.500000 0.500000
+vt 0.000100 0.000100
+vt 0.000100 0.999900
+vt 0.999900 0.999900
+vn -0.894427 0.447214 -0.000000
+vn 0.894427 0.447213 0.000000
+vn 0.000000 0.447214 -0.894427
+vn -0.000000 0.447214 0.894427
+s off
+f 3/1/1 4/2/1 5/3/1
+f 1/4/2 4/2/2 2/5/2
+f 5/3/3 4/2/3 1/4/3
+f 2/5/4 4/2/4 3/1/4
diff --git a/src/datavis3d/engine/meshes/pyramidSmooth.obj b/src/datavis3d/engine/meshes/pyramidSmooth.obj
new file mode 100644
index 00000000..b11c8750
--- /dev/null
+++ b/src/datavis3d/engine/meshes/pyramidSmooth.obj
@@ -0,0 +1,23 @@
+# Blender v2.66 (sub 0) OBJ File: 'pyramid.blend'
+# www.blender.org
+o Cone_Cone.001
+v 1.000000 -1.000000 -0.999999
+v 0.999999 -1.000000 1.000000
+v -1.000000 -1.000000 0.999999
+v 0.000000 1.000000 0.000000
+v -0.999999 -1.000000 -1.000000
+vt 0.999900 0.000100
+vt 0.500000 0.500000
+vt 0.000100 0.000100
+vt 0.000100 0.999900
+vt 0.999900 0.999900
+vn -0.577349 0.577349 0.577349
+vn 0.000000 1.000000 0.000000
+vn -0.577349 0.577349 -0.577349
+vn 0.577349 0.577349 -0.577349
+vn 0.577349 0.577349 0.577349
+s 1
+f 3/1/1 4/2/2 5/3/3
+f 1/4/4 4/2/2 2/5/5
+f 5/3/3 4/2/2 1/4/4
+f 2/5/5 4/2/2 3/1/1
diff --git a/src/datavis3d/engine/q3dbars.cpp b/src/datavis3d/engine/q3dbars.cpp
new file mode 100644
index 00000000..36ca1b0a
--- /dev/null
+++ b/src/datavis3d/engine/q3dbars.cpp
@@ -0,0 +1,625 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "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 Digia Plc and its Subsidiary(-ies) 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."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "q3dbars.h"
+#include "q3dbars_p.h"
+#include "meshloader_p.h"
+#include "vertexindexer_p.h"
+#include "camerahelper_p.h"
+
+#include <QMatrix4x4>
+#include <QOpenGLShaderProgram>
+#include <QScreen>
+#include <QMouseEvent>
+
+//#include <qmath.h>
+
+#include <QDebug>
+
+QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE
+
+const float maxSceneSize = 40.0;
+
+Q3DBars::Q3DBars()
+ : d_ptr(new Q3DBarsPrivate(this))
+{
+}
+
+Q3DBars::~Q3DBars()
+{
+ glDeleteBuffers(1, &d_ptr->m_vertexbuffer);
+ glDeleteBuffers(1, &d_ptr->m_uvbuffer);
+ glDeleteBuffers(1, &d_ptr->m_normalbuffer);
+ glDeleteBuffers(1, &d_ptr->m_elementbuffer);
+ glDeleteBuffers(1, &d_ptr->m_vertexbufferBackground);
+ glDeleteBuffers(1, &d_ptr->m_uvbufferBackground);
+ glDeleteBuffers(1, &d_ptr->m_normalbufferBackground);
+ glDeleteBuffers(1, &d_ptr->m_elementbufferBackground);
+}
+
+void Q3DBars::initialize()
+{
+ // Initialize shaders
+ d_ptr->initShaders(QStringLiteral(":/shaders/vertex"), QStringLiteral(":/shaders/fragment"));
+
+ // Load default mesh
+ d_ptr->loadBarMesh();
+
+ // Load background mesh
+ d_ptr->loadBackgroundMesh();
+
+ // Set clear color
+ glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
+
+ // Set OpenGL features
+ glEnable(GL_DEPTH_TEST);
+ glDepthFunc(GL_LESS);
+ glEnable(GL_CULL_FACE);
+ glCullFace(GL_BACK);
+ //glFrontFace(GL_CCW);
+
+ // Set initial camera position
+ // X must be 0 for rotation to work - we can use "setCameraRotation" for setting it later
+ CameraHelper::setDefaultCameraOrientation(QVector3D(0.0f, 0.0f, 6.0f)
+ , QVector3D(0.0f, 0.0f, 0.0f)
+ , QVector3D(0.0f, 1.0f, 0.0f));
+
+ CameraHelper::setCameraRotation(QPointF(-45.0f, 15.0f));
+
+ // Set view port
+ glViewport(0, 0, width(), height());
+}
+
+void Q3DBars::render()
+{
+ int startBar = 0;
+ int stopBar = 0;
+ int stepBar = 0;
+
+ int startRow = 0;
+ int stopRow = 0;
+ int stepRow = 0;
+
+ float barPos = 0;
+ float rowPos = 0;
+
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ d_ptr->m_program->bind();
+
+ QMatrix4x4 projectionMatrix;
+ projectionMatrix.perspective(45.0f, (float)width() / (float)height(), 0.1f, 100.0f);
+
+ QMatrix4x4 viewMatrix = CameraHelper::calculateViewMatrix(d_ptr->m_mousePos, d_ptr->m_zoomLevel
+ , width(), height());
+
+ // Calculate drawing order
+ //qDebug() << "viewMatrix" << viewMatrix.row(0).z(); // jos negatiivinen, käännä bar -piirtojärjestys
+ //qDebug() << "viewMatrix" << viewMatrix.row(0).x(); // jos negatiivinen, käännä row -piirtojärjestys
+ // TODO: Needs more tuning unless we get depth test working correctly
+ if (viewMatrix.row(0).x() < 0) {
+ startRow = 0;
+ stopRow = d_ptr->m_sampleCount.y();
+ stepRow = 1;
+ }
+ else {
+ startRow = d_ptr->m_sampleCount.y() - 1;
+ stopRow = -1;
+ stepRow = -1;
+ }
+ if (viewMatrix.row(0).z() > 0) {
+ startBar = 0;
+ stopBar = d_ptr->m_sampleCount.x();
+ stepBar = 1;
+ }
+ else {
+ startBar = d_ptr->m_sampleCount.x() - 1;
+ stopBar = -1;
+ stepBar = -1;
+ }
+
+ //qDebug() << "projectionMatrix" << projectionMatrix;
+ QVector3D lightPos = QVector3D(0.0f, 1.5f
+ , (d_ptr->m_sampleCount.y() / 5.0f));
+
+ // Draw background
+ if (d_ptr->m_background) {
+ QMatrix4x4 modelMatrix;
+ QMatrix4x4 MVPMatrix;
+ modelMatrix.scale(QVector3D(d_ptr->m_rowWidth * d_ptr->m_sceneScale
+ , 1.0f
+ , d_ptr->m_columnDepth * d_ptr->m_sceneScale));
+ modelMatrix.rotate(-90.0f, 0.0f, 1.0f, 0.0f);
+
+ MVPMatrix = projectionMatrix * viewMatrix * modelMatrix;
+
+ //qDebug() << "modelMatrix" << modelMatrix;
+ //qDebug() << "MVPMatrix" << MVPMatrix;
+
+ QVector3D barColor = QVector3D(0.5, 0.5, 0.5);
+
+ d_ptr->m_program->setUniformValue(d_ptr->m_lightPositionUniform, lightPos);
+ d_ptr->m_program->setUniformValue(d_ptr->m_viewMatrixUniform, viewMatrix);
+ d_ptr->m_program->setUniformValue(d_ptr->m_modelMatrixUniform, modelMatrix);
+ d_ptr->m_program->setUniformValue(d_ptr->m_invTransModelMatrixUniform
+ , modelMatrix.inverted().transposed());
+ d_ptr->m_program->setUniformValue(d_ptr->m_mvpMatrixUniform, MVPMatrix);
+ d_ptr->m_program->setUniformValue(d_ptr->m_colorUniform, barColor);
+ d_ptr->m_program->setUniformValue(d_ptr->m_lightStrengthUniform, 4.0f);
+
+ // 1st attribute buffer : vertices
+ glEnableVertexAttribArray(0);
+ glBindBuffer(GL_ARRAY_BUFFER, d_ptr->m_vertexbufferBackground);
+ glVertexAttribPointer(d_ptr->m_positionAttr, 3, GL_FLOAT, GL_TRUE, 0, (void*)0);
+
+ // 2nd attribute buffer : normals
+ glEnableVertexAttribArray(1);
+ glBindBuffer(GL_ARRAY_BUFFER, d_ptr->m_normalbufferBackground);
+ glVertexAttribPointer(d_ptr->m_normalAttr, 3, GL_FLOAT, GL_TRUE, 0, (void*)0);
+
+ // 3rd attribute buffer : UVs
+ //glEnableVertexAttribArray(2);
+ //glBindBuffer(GL_ARRAY_BUFFER, d_ptr->m_uvbufferBackground);
+ //glVertexAttribPointer(d_ptr->m_uvAttr, 2, GL_FLOAT, GL_FALSE, 0, (void*)0);
+
+ // Index buffer
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, d_ptr->m_elementbufferBackground);
+
+ // Draw the triangles
+ glDrawElements(GL_TRIANGLES, d_ptr->m_indexCountBackground, GL_UNSIGNED_SHORT, (void*)0);
+
+ glDisableVertexAttribArray(0);
+ glDisableVertexAttribArray(1);
+ //glDisableVertexAttribArray(2);
+ }
+
+ // Draw bars
+ for (int row = startRow; row != stopRow; row += stepRow) {
+ for (int bar = startBar; bar != stopBar; bar += stepBar) {
+ float barHeight = d_ptr->m_dataSet.at(row).at(bar);
+ //qDebug() << "barHeight" << barHeight;
+ QMatrix4x4 modelMatrix;
+ QMatrix4x4 MVPMatrix;
+ barPos = (bar + 1) * (d_ptr->m_barSpacing.x());
+ //qDebug() << "x" << d_ptr->m_rowWidth << "-" << barPos << "=" << d_ptr->m_rowWidth - barPos;
+ rowPos = (row + 1) * (d_ptr->m_barSpacing.y());
+ //qDebug() << "z" << rowPos << "-" << d_ptr->m_columnDepth << "=" << rowPos - d_ptr->m_columnDepth;
+ modelMatrix.translate((d_ptr->m_rowWidth - barPos) / d_ptr->m_scaleFactorX
+ , barHeight - 1.0f
+ , (d_ptr->m_columnDepth - rowPos) / d_ptr->m_scaleFactorZ);
+ modelMatrix.scale(QVector3D(d_ptr->m_scaleX, barHeight, d_ptr->m_scaleZ));
+
+ MVPMatrix = projectionMatrix * viewMatrix * modelMatrix;
+
+ //qDebug() << "modelMatrix" << modelMatrix;
+ //qDebug() << "MVPMatrix" << MVPMatrix;
+
+ QVector3D barColor = QVector3D(float(row) / float(d_ptr->m_sampleCount.y())
+ , 0
+ , barHeight);
+ //QVector3D barColor = QVector3D(0.1, 0.1, 0.5);
+
+ d_ptr->m_program->setUniformValue(d_ptr->m_lightPositionUniform, lightPos);
+ d_ptr->m_program->setUniformValue(d_ptr->m_viewMatrixUniform, viewMatrix);
+ d_ptr->m_program->setUniformValue(d_ptr->m_modelMatrixUniform, modelMatrix);
+ d_ptr->m_program->setUniformValue(d_ptr->m_invTransModelMatrixUniform
+ , modelMatrix.inverted().transposed());
+ d_ptr->m_program->setUniformValue(d_ptr->m_mvpMatrixUniform, MVPMatrix);
+ d_ptr->m_program->setUniformValue(d_ptr->m_colorUniform, barColor);
+ d_ptr->m_program->setUniformValue(d_ptr->m_lightStrengthUniform, 4.0f);
+ //qDebug() << "height:" << barHeight;
+
+ // 1st attribute buffer : vertices
+ glEnableVertexAttribArray(0);
+ glBindBuffer(GL_ARRAY_BUFFER, d_ptr->m_vertexbuffer);
+ glVertexAttribPointer(d_ptr->m_positionAttr, 3, GL_FLOAT, GL_TRUE, 0, (void*)0);
+
+ // 2nd attribute buffer : normals
+ glEnableVertexAttribArray(1);
+ glBindBuffer(GL_ARRAY_BUFFER, d_ptr->m_normalbuffer);
+ glVertexAttribPointer(d_ptr->m_normalAttr, 3, GL_FLOAT, GL_TRUE, 0, (void*)0);
+
+ // 3rd attribute buffer : UVs
+ //glEnableVertexAttribArray(2);
+ //glBindBuffer(GL_ARRAY_BUFFER, d_ptr->m_uvbuffer);
+ //glVertexAttribPointer(d_ptr->m_uvAttr, 2, GL_FLOAT, GL_FALSE, 0, (void*)0);
+
+ // Index buffer
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, d_ptr->m_elementbuffer);
+
+ // Draw the triangles
+ glDrawElements(GL_TRIANGLES, d_ptr->m_indexCount, GL_UNSIGNED_SHORT, (void*)0);
+
+ glDisableVertexAttribArray(0);
+ glDisableVertexAttribArray(1);
+ //glDisableVertexAttribArray(2);
+ }
+ }
+
+ d_ptr->m_program->release();
+}
+
+void Q3DBars::mousePressEvent(QMouseEvent *event)
+{
+ // TODO: for testing shaders
+ static bool shaderOne = true;
+ //qDebug() << "mouse button pressed" << event->button();
+ if (Qt::LeftButton == event->button()) {
+ d_ptr->m_mousePressed = true;
+ // update mouse positions to prevent jumping when releasing or repressing a button
+ d_ptr->m_mousePos = event->pos();
+ }
+ else if (Qt::RightButton == event->button()) {
+ // reset rotations
+ d_ptr->m_mousePos = QPoint(0, 0);
+ }
+ else if (Qt::MiddleButton == event->button()) {
+ // TODO: testing shaders
+ if (shaderOne) {
+ shaderOne = false;
+ d_ptr->initShaders(QStringLiteral(":/shaders/vertex")
+ , QStringLiteral(":/shaders/fragmentAmbient"));
+ }
+ else {
+ shaderOne = true;
+ d_ptr->initShaders(QStringLiteral(":/shaders/vertex")
+ , QStringLiteral(":/shaders/fragment"));
+ }
+ }
+ CameraHelper::updateMousePos(d_ptr->m_mousePos);
+}
+
+void Q3DBars::mouseReleaseEvent(QMouseEvent *event)
+{
+ //qDebug() << "mouse button released" << event->button();
+ d_ptr->m_mousePressed = false;
+ // update mouse positions to prevent jumping when releasing or repressing a button
+ d_ptr->m_mousePos = event->pos();
+ CameraHelper::updateMousePos(event->pos());
+}
+
+void Q3DBars::mouseMoveEvent(QMouseEvent *event)
+{
+ if (d_ptr->m_mousePressed) {
+ //qDebug() << "mouse moved while pressed" << event->pos();
+ d_ptr->m_mousePos = event->pos();
+ }
+}
+
+void Q3DBars::wheelEvent(QWheelEvent *event)
+{
+ if (d_ptr->m_zoomLevel > 100) {
+ d_ptr->m_zoomLevel += event->angleDelta().y() / 12;
+ }
+ else if (d_ptr->m_zoomLevel > 50) {
+ d_ptr->m_zoomLevel += event->angleDelta().y() / 60;
+ }
+ else {
+ d_ptr->m_zoomLevel += event->angleDelta().y() / 120;
+ }
+ if (d_ptr->m_zoomLevel > 500) {
+ d_ptr->m_zoomLevel = 500;
+ }
+ else if (d_ptr->m_zoomLevel < 10) {
+ d_ptr->m_zoomLevel = 10;
+ }
+
+}
+
+void Q3DBars::resizeEvent(QResizeEvent *event)
+{
+ Q_UNUSED(event);
+
+ // Set view port
+ glViewport(0, 0, width(), height());
+
+ // If orientation changes, we need to scale again
+ // TODO: Handle it
+}
+
+void Q3DBars::addDataSet(QVector<float> data)
+{
+ // Check that the input data fits into sample space, and resize if it doesn't
+ if (data.size() > d_ptr->m_sampleCount.x()) {
+ data.resize(d_ptr->m_sampleCount.x());
+ qWarning("Data set too large for sample space");
+ }
+ // The vector contains data (=height) for each bar, a row at a time
+ // With each new row, the previous data set (=row) must be moved back
+ // ie. we need as many vectors as we have rows in the sample space
+ d_ptr->m_dataSet.prepend(data);
+ // if the added data pushed us over sample space, remove the oldest data set
+ if (d_ptr->m_dataSet.size() > d_ptr->m_sampleCount.y())
+ d_ptr->m_dataSet.resize(d_ptr->m_sampleCount.y());
+}
+
+void Q3DBars::setBarSpecs(QPointF thickness, QPointF spacing, bool relative)
+{
+ d_ptr->m_barThickness = thickness;
+ if (relative) {
+ d_ptr->m_barSpacing.setX((thickness.x() * 2) * (spacing.x() + 1.0f));
+ d_ptr->m_barSpacing.setY((thickness.y() * 2) * (spacing.y() + 1.0f));
+ }
+ else {
+ d_ptr->m_barSpacing = thickness * 2 + spacing * 2;
+ }
+ // Calculate here and at setting sample space
+ d_ptr->calculateSceneScalingFactors();
+}
+
+void Q3DBars::setBarType(BarStyle style, bool smooth)
+{
+ if (style == Bars) {
+ if (smooth) {
+ d_ptr->m_objFile = QStringLiteral(":/defaultMeshes/barSmooth");
+ }
+ else {
+ d_ptr->m_objFile = QStringLiteral(":/defaultMeshes/bar");
+ }
+ }
+ else if (style == Pyramids) {
+ if (smooth) {
+ d_ptr->m_objFile = QStringLiteral(":/defaultMeshes/pyramidSmooth");
+ }
+ else {
+ d_ptr->m_objFile = QStringLiteral(":/defaultMeshes/pyramid");
+ }
+ }
+ else if (style == Cones) {
+ if (smooth) {
+ d_ptr->m_objFile = QStringLiteral(":/defaultMeshes/coneSmooth");
+ }
+ else {
+ d_ptr->m_objFile = QStringLiteral(":/defaultMeshes/cone");
+ }
+ }
+ else if (style == Cylinders) {
+ if (smooth) {
+ d_ptr->m_objFile = QStringLiteral(":/defaultMeshes/cylinderSmooth");
+ }
+ else {
+ d_ptr->m_objFile = QStringLiteral(":/defaultMeshes/cylinder");
+ }
+ }
+ else if (style == Apes) {
+ if (smooth) {
+ d_ptr->m_objFile = QStringLiteral(":/defaultMeshes/apeSmooth");
+ }
+ else {
+ d_ptr->m_objFile = QStringLiteral(":/defaultMeshes/ape");
+ }
+ }
+ // Reload mesh data
+ d_ptr->loadBarMesh();
+}
+
+void Q3DBars::setMeshFileName(const QString &objFileName)
+{
+ d_ptr->m_objFile = objFileName;
+}
+
+void Q3DBars::setupSampleSpace(QPoint sampleCount)
+{
+ d_ptr->m_sampleCount = sampleCount;
+ // Initialize data set
+ QVector<float> row;
+ for (int columns = 0; columns < sampleCount.x(); columns ++) {
+ row.append(0.0f);
+ }
+ for (int rows = 0; rows < sampleCount.y(); rows++) {
+ d_ptr->m_dataSet.append(row);
+ }
+ // Calculate here and at setting bar specs
+ d_ptr->calculateSceneScalingFactors();
+}
+
+Q3DBarsPrivate::Q3DBarsPrivate(Q3DBars *q)
+ : q_ptr(q)
+ , m_program(0)
+ , m_sampleCount(QPoint(0, 0))
+ , m_objFile(QStringLiteral(":/defaultMeshes/bar"))
+ , m_vertexCount(0)
+ , m_indexCount(0)
+ , m_indexCountBackground(0)
+ , m_mousePressed(false)
+ , m_mousePos(QPoint(0, 0))
+ , m_zoomLevel(100)
+ , m_barThickness(QPointF(0.75f, 0.75f))
+ , m_barSpacing(m_barThickness * 3.0f)
+ , m_meshDataLoaded(false)
+ , m_background(false)
+ , m_dataSet(0)
+ , m_rowWidth(0)
+ , m_columnDepth(0)
+ , m_maxDimension(0)
+ , m_scaleX(0)
+ , m_scaleZ(0)
+ , m_scaleFactorX(0)
+ , m_scaleFactorZ(0)
+ , m_sceneScale(0)
+{
+}
+
+Q3DBarsPrivate::~Q3DBarsPrivate()
+{
+}
+
+void Q3DBarsPrivate::loadBarMesh()
+{
+ if (m_meshDataLoaded) {
+ // Delete old data
+ glDeleteBuffers(1, &m_vertexbuffer);
+ glDeleteBuffers(1, &m_uvbuffer);
+ glDeleteBuffers(1, &m_normalbuffer);
+ glDeleteBuffers(1, &m_elementbuffer);
+ }
+ QVector<QVector3D> vertices;
+ QVector<QVector2D> uvs;
+ QVector<QVector3D> normals;
+ bool loadOk = MeshLoader::loadOBJ(m_objFile, vertices, uvs, normals);
+ if (!loadOk)
+ qFatal("loading failed");
+
+ m_vertexCount = vertices.size();
+ qDebug() << "vertex count" << m_vertexCount;
+
+ // Index vertices
+ QVector<unsigned short> indices;
+ QVector<QVector3D> indexed_vertices;
+ QVector<QVector2D> indexed_uvs;
+ QVector<QVector3D> indexed_normals;
+ VertexIndexer::indexVBO(vertices, uvs, normals, indices, indexed_vertices, indexed_uvs
+ , indexed_normals);
+
+ m_indexCount = indices.size();
+ //qDebug() << "index count" << m_indexCount;
+
+ glGenBuffers(1, &m_vertexbuffer);
+ glBindBuffer(GL_ARRAY_BUFFER, m_vertexbuffer);
+ glBufferData(GL_ARRAY_BUFFER, indexed_vertices.size() * sizeof(QVector3D)
+ , &indexed_vertices.at(0)
+ , GL_STATIC_DRAW);
+
+ glGenBuffers(1, &m_normalbuffer);
+ glBindBuffer(GL_ARRAY_BUFFER, m_normalbuffer);
+ glBufferData(GL_ARRAY_BUFFER, indexed_normals.size() * sizeof(QVector3D)
+ , &indexed_normals.at(0)
+ , GL_STATIC_DRAW);
+
+ //glGenBuffers(1, &m_uvbuffer);
+ //glBindBuffer(GL_ARRAY_BUFFER, m_uvbuffer);
+ //glBufferData(GL_ARRAY_BUFFER, indexed_uvs.size() * sizeof(QVector2D), &indexed_uvs.at(0)
+ // , GL_STATIC_DRAW);
+
+ glGenBuffers(1, &m_elementbuffer);
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_elementbuffer);
+ glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * sizeof(unsigned short), &indices.at(0)
+ , GL_STATIC_DRAW);
+
+ m_meshDataLoaded = true;
+}
+
+void Q3DBarsPrivate::loadBackgroundMesh()
+{
+ QVector<QVector3D> vertices;
+ QVector<QVector2D> uvs;
+ QVector<QVector3D> normals;
+ bool loadOk = MeshLoader::loadOBJ(QStringLiteral(":/defaultMeshes/background")
+ , vertices, uvs, normals);
+ if (!loadOk)
+ qFatal("loading failed");
+
+ // Index vertices
+ QVector<unsigned short> indices;
+ QVector<QVector3D> indexed_vertices;
+ QVector<QVector2D> indexed_uvs;
+ QVector<QVector3D> indexed_normals;
+ VertexIndexer::indexVBO(vertices, uvs, normals, indices, indexed_vertices, indexed_uvs
+ , indexed_normals);
+
+ m_indexCountBackground = indices.size();
+
+ glGenBuffers(1, &m_vertexbufferBackground);
+ glBindBuffer(GL_ARRAY_BUFFER, m_vertexbufferBackground);
+ glBufferData(GL_ARRAY_BUFFER, indexed_vertices.size() * sizeof(QVector3D)
+ , &indexed_vertices.at(0)
+ , GL_STATIC_DRAW);
+
+ glGenBuffers(1, &m_normalbufferBackground);
+ glBindBuffer(GL_ARRAY_BUFFER, m_normalbufferBackground);
+ glBufferData(GL_ARRAY_BUFFER, indexed_normals.size() * sizeof(QVector3D)
+ , &indexed_normals.at(0)
+ , GL_STATIC_DRAW);
+
+ //glGenBuffers(1, &m_uvbufferBackground);
+ //glBindBuffer(GL_ARRAY_BUFFER, m_uvbufferBackground);
+ //glBufferData(GL_ARRAY_BUFFER, indexed_uvs.size() * sizeof(QVector2D), &indexed_uvs.at(0)
+ // , GL_STATIC_DRAW);
+
+ glGenBuffers(1, &m_elementbufferBackground);
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_elementbufferBackground);
+ glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * sizeof(unsigned short), &indices.at(0)
+ , GL_STATIC_DRAW);
+
+ m_background = true;
+}
+
+void Q3DBarsPrivate::initShaders(QString vertexShader, QString fragmentShader)
+{
+ if (m_program)
+ delete m_program;
+ m_program = new QOpenGLShaderProgram(q_ptr);
+ if (!m_program->addShaderFromSourceFile(QOpenGLShader::Vertex, vertexShader))
+ qFatal("Compiling Vertex shader failed");
+ if (!m_program->addShaderFromSourceFile(QOpenGLShader::Fragment, fragmentShader))
+ qFatal("Compiling Fragment shader failed");
+ m_program->link();
+ m_mvpMatrixUniform = m_program->uniformLocation("MVP");
+ m_viewMatrixUniform = m_program->uniformLocation("V");
+ m_modelMatrixUniform = m_program->uniformLocation("M");
+ m_invTransModelMatrixUniform = m_program->uniformLocation("itM");
+ m_positionAttr = m_program->attributeLocation("vertexPosition_mdl");
+ m_uvAttr = m_program->attributeLocation("vertexUV");
+ m_normalAttr = m_program->attributeLocation("vertexNormal_mdl");
+ m_lightPositionUniform = m_program->uniformLocation("lightPosition_wrld");
+ m_colorUniform = m_program->uniformLocation("color_mdl");
+ m_lightStrengthUniform = m_program->uniformLocation("lightStrength");
+}
+
+void Q3DBarsPrivate::calculateSceneScalingFactors()
+{
+ // Calculate scene scaling and translation factors
+ m_rowWidth = ((m_sampleCount.x() + 1) * m_barSpacing.x()) / 2.0f;
+ m_columnDepth = ((m_sampleCount.y() + 1) * m_barSpacing.y()) / 2.0f;
+ m_maxDimension = (m_rowWidth > m_columnDepth) ? m_rowWidth : m_columnDepth;
+ m_scaleX = m_barThickness.x() / m_sampleCount.x() * (maxSceneSize / m_maxDimension);
+ m_scaleZ = m_barThickness.y() / m_sampleCount.x() * (maxSceneSize / m_maxDimension);
+ m_sceneScale = (m_scaleX < m_scaleZ) ? m_scaleX : m_scaleZ;
+ float minThickness = (m_barThickness.x() < m_barThickness.y()) ? m_barThickness.x() : m_barThickness.y();
+ m_sceneScale = m_sceneScale / minThickness;
+ m_scaleFactorX = m_sampleCount.x() * (m_maxDimension / maxSceneSize);
+ m_scaleFactorZ = m_sampleCount.x() * (m_maxDimension / maxSceneSize);
+ qDebug() << "m_scaleX" << m_scaleX << "m_scaleFactorX" << m_scaleFactorX;
+ qDebug() << "m_scaleZ" << m_scaleZ << "m_scaleFactorZ" << m_scaleFactorZ;
+ qDebug() << "m_rowWidth:" << m_rowWidth << "m_columnDepth:" << m_columnDepth << "m_maxDimension:" << m_maxDimension;
+ qDebug() << m_rowWidth * m_sceneScale << m_columnDepth * m_sceneScale;
+}
+
+QTCOMMERCIALDATAVIS3D_END_NAMESPACE
diff --git a/src/datavis3d/engine/q3dbars.h b/src/datavis3d/engine/q3dbars.h
new file mode 100644
index 00000000..c67d0ee9
--- /dev/null
+++ b/src/datavis3d/engine/q3dbars.h
@@ -0,0 +1,60 @@
+#ifndef Q3DBARS_H
+#define Q3DBARS_H
+
+#include "qdatavis3dglobal.h"
+#include "q3dwindow.h"
+
+class QOpenGLShaderProgram;
+
+QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE
+
+class Q3DBarsPrivate;
+
+class QTCOMMERCIALDATAVIS3D_EXPORT Q3DBars : public Q3DWindow
+{
+ Q_OBJECT
+public:
+ enum BarStyle {
+ Bars = 0,
+ Pyramids,
+ Cones,
+ Cylinders,
+ Apes // TODO: remove; inserted now just for fun
+ };
+
+public:
+ explicit Q3DBars();
+ ~Q3DBars();
+
+ void initialize();
+ void render();
+
+ void addDataSet(QVector<float> data);
+ // bar thickness, spacing between bars, and is spacing relative to thickness or absolute
+ // y -component sets the thickness/spacing of z -direction
+ // With relative 0.0f means side-to-side, 1.0f = one thickness in between
+ void setBarSpecs(QPointF thickness = QPointF(1.0f, 1.0f)
+ , QPointF spacing = QPointF(1.0f, 1.0f)
+ , bool relative = true);
+ // bar type; bars (=cubes), pyramids, cones, cylinders, etc.
+ void setBarType(BarStyle style, bool smooth = false);
+ // override bar type with own mesh
+ void setMeshFileName(const QString &objFileName);
+ // how many samples per row and column
+ void setupSampleSpace(QPoint sampleCount);
+
+protected:
+ void mousePressEvent(QMouseEvent *event);
+ void mouseReleaseEvent(QMouseEvent *event);
+ void mouseMoveEvent(QMouseEvent *event);
+ void wheelEvent(QWheelEvent *event);
+ void resizeEvent(QResizeEvent *event);
+
+private:
+ QScopedPointer<Q3DBarsPrivate> d_ptr;
+ Q_DISABLE_COPY(Q3DBars)
+};
+
+QTCOMMERCIALDATAVIS3D_END_NAMESPACE
+
+#endif
diff --git a/src/datavis3d/engine/q3dbars_p.h b/src/datavis3d/engine/q3dbars_p.h
new file mode 100644
index 00000000..b72e2ed3
--- /dev/null
+++ b/src/datavis3d/engine/q3dbars_p.h
@@ -0,0 +1,73 @@
+#ifndef Q3DBARS_p_H
+#define Q3DBARS_p_H
+
+#include "qdatavis3dglobal.h"
+
+class QOpenGLShaderProgram;
+class QPoint;
+class QPointF;
+
+QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE
+
+class Q3DBars;
+
+class Q3DBarsPrivate
+{
+public:
+ Q3DBarsPrivate(Q3DBars *q);
+ ~Q3DBarsPrivate();
+
+ void loadBarMesh();
+ void loadBackgroundMesh();
+ void initShaders(QString vertexShader, QString fragmentShader);
+ void calculateSceneScalingFactors();
+
+ GLuint m_positionAttr;
+ GLuint m_uvAttr;
+ GLuint m_normalAttr;
+ GLuint m_colorUniform;
+ GLuint m_viewMatrixUniform;
+ GLuint m_modelMatrixUniform;
+ GLuint m_invTransModelMatrixUniform;
+ GLuint m_mvpMatrixUniform;
+ GLuint m_lightPositionUniform;
+ GLuint m_lightStrengthUniform;
+
+ GLuint m_vertexbuffer;
+ GLuint m_uvbuffer;
+ GLuint m_normalbuffer;
+ GLuint m_elementbuffer;
+ GLuint m_vertexbufferBackground;
+ GLuint m_uvbufferBackground;
+ GLuint m_normalbufferBackground;
+ GLuint m_elementbufferBackground;
+
+ Q3DBars *q_ptr;
+
+ QOpenGLShaderProgram *m_program;
+ QPoint m_sampleCount;
+ QString m_objFile;
+ int m_vertexCount;
+ int m_indexCount;
+ int m_indexCountBackground;
+ bool m_mousePressed;
+ QPoint m_mousePos;
+ int m_zoomLevel;
+ QPointF m_barThickness;
+ QPointF m_barSpacing;
+ bool m_meshDataLoaded;
+ bool m_background;
+ QVector<QVector<float>> m_dataSet;
+ float m_rowWidth;
+ float m_columnDepth;
+ float m_maxDimension;
+ float m_scaleX;
+ float m_scaleZ;
+ float m_scaleFactorX;
+ float m_scaleFactorZ;
+ float m_sceneScale;
+};
+
+QTCOMMERCIALDATAVIS3D_END_NAMESPACE
+
+#endif
diff --git a/src/datavis3d/engine/q3dwindow.cpp b/src/datavis3d/engine/q3dwindow.cpp
new file mode 100644
index 00000000..0ca1bad6
--- /dev/null
+++ b/src/datavis3d/engine/q3dwindow.cpp
@@ -0,0 +1,184 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "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 Digia Plc and its Subsidiary(-ies) 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."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "q3dwindow.h"
+#include "q3dwindow_p.h"
+
+#include <QCoreApplication>
+
+#include <QOpenGLContext>
+#include <QOpenGLPaintDevice>
+#include <QPainter>
+
+#include <QDebug>
+
+QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE
+
+Q3DWindow::Q3DWindow(QWindow *parent)
+ : QWindow(parent)
+ , d_ptr(new Q3DWindowPrivate(this))
+{
+ setSurfaceType(QWindow::OpenGLSurface);
+ QSurfaceFormat surfaceFormat;
+ //surfaceFormat.setDepthBufferSize(16000000);
+ surfaceFormat.setSamples(4);
+ surfaceFormat.setMajorVersion(2);
+ surfaceFormat.setMinorVersion(1);
+ surfaceFormat.setSwapBehavior(QSurfaceFormat::DoubleBuffer);
+ //surfaceFormat.setRenderableType(QSurfaceFormat::OpenGLES); // OpenGL crashes
+ setFormat(surfaceFormat);
+ qDebug() << "OpenGL version" << format().majorVersion() << format().minorVersion();
+ qDebug() << "OpenGL renderer" << format().renderableType();
+ qDebug() << "OpenGL swapBehavior" << format().swapBehavior();
+}
+
+Q3DWindow::~Q3DWindow()
+{
+}
+
+void Q3DWindow::render(QPainter *painter)
+{
+ Q_UNUSED(painter);
+}
+
+void Q3DWindow::initialize()
+{
+}
+
+void Q3DWindow::render()
+{
+// if (!d_ptr->m_device)
+// d_ptr->m_device = new QOpenGLPaintDevice;
+
+// d_ptr->m_device->setSize(size());
+
+// QPainter painter(d_ptr->m_device);
+// render(&painter);
+}
+
+void Q3DWindow::renderLater()
+{
+ if (!d_ptr->m_update_pending) {
+ d_ptr->m_update_pending = true;
+ QCoreApplication::postEvent(this, new QEvent(QEvent::UpdateRequest));
+ }
+}
+
+bool Q3DWindow::event(QEvent *event)
+{
+ switch (event->type()) {
+ case QEvent::UpdateRequest:
+ renderNow();
+ return true;
+ default:
+ return QWindow::event(event);
+ }
+}
+
+void Q3DWindow::exposeEvent(QExposeEvent *event)
+{
+ Q_UNUSED(event);
+
+ if (isExposed())
+ renderNow();
+}
+
+void Q3DWindow::resizeEvent(QResizeEvent *event)
+{
+ Q_UNUSED(event);
+
+ if (isExposed())
+ renderNow();
+}
+
+void Q3DWindow::renderNow()
+{
+ if (!isExposed())
+ return;
+
+ d_ptr->m_update_pending = false;
+
+ bool needsInitialize = false;
+
+ if (!d_ptr->m_context) {
+ d_ptr->m_context = new QOpenGLContext(this);
+ d_ptr->m_context->setFormat(requestedFormat());
+ d_ptr->m_context->create();
+
+ needsInitialize = true;
+ }
+
+ d_ptr->m_context->makeCurrent(this);
+
+ if (needsInitialize) {
+ initializeOpenGLFunctions();
+ initialize();
+ }
+
+ render();
+
+ d_ptr->m_context->swapBuffers(this);
+
+ if (d_ptr->m_animating)
+ renderLater();
+}
+
+void Q3DWindow::setAnimating(bool animating)
+{
+ d_ptr->m_animating = animating;
+
+ if (animating)
+ renderLater();
+}
+
+Q3DWindowPrivate::Q3DWindowPrivate(Q3DWindow *q)
+ : q_ptr(q)
+ , m_update_pending(false)
+ , m_animating(true)
+ , m_context(0)
+ , m_device(0)
+{
+}
+
+Q3DWindowPrivate::~Q3DWindowPrivate()
+{
+}
+
+QTCOMMERCIALDATAVIS3D_END_NAMESPACE
diff --git a/src/datavis3d/engine/q3dwindow.h b/src/datavis3d/engine/q3dwindow.h
new file mode 100644
index 00000000..e8bb7032
--- /dev/null
+++ b/src/datavis3d/engine/q3dwindow.h
@@ -0,0 +1,95 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtXmlPatterns module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+
+#ifndef Q3DWINDOW_H
+#define Q3DWINDOW_H
+
+#include "qdatavis3dglobal.h"
+#include "q3dwindow_p.h"
+
+#include <QWindow>
+#include <QOpenGLFunctions>
+
+class QPainter;
+
+QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE
+
+class Q3DWindow : public QWindow, protected QOpenGLFunctions
+{
+ Q_OBJECT
+ public:
+ explicit Q3DWindow(QWindow *parent = 0);
+ ~Q3DWindow();
+
+ virtual void render(QPainter *painter);
+ virtual void render();
+
+ virtual void initialize();
+
+ void setAnimating(bool animating);
+
+ public slots:
+ void renderLater();
+ void renderNow();
+
+ protected:
+ bool event(QEvent *event);
+
+ void exposeEvent(QExposeEvent *event);
+ void resizeEvent(QResizeEvent *event);
+
+ private:
+ QScopedPointer<Q3DWindowPrivate> d_ptr;
+};
+
+QTCOMMERCIALDATAVIS3D_END_NAMESPACE
+
+#endif
diff --git a/src/datavis3d/engine/q3dwindow_p.h b/src/datavis3d/engine/q3dwindow_p.h
new file mode 100644
index 00000000..0aa58e7d
--- /dev/null
+++ b/src/datavis3d/engine/q3dwindow_p.h
@@ -0,0 +1,82 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtXmlPatterns module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+
+#ifndef Q3DWINDOW_p_H
+#define Q3DWINDOW_p_H
+
+#include "qdatavis3dglobal.h"
+
+class QOpenGLContext;
+class QOpenGLPaintDevice;
+
+QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE
+
+class Q3DWindow;
+
+class Q3DWindowPrivate
+{
+ public:
+ Q3DWindowPrivate(Q3DWindow *q);
+ ~Q3DWindowPrivate();
+
+ public:
+ Q3DWindow *q_ptr;
+
+ bool m_update_pending;
+ bool m_animating;
+
+ QOpenGLContext *m_context;
+ QOpenGLPaintDevice *m_device;
+};
+
+QTCOMMERCIALDATAVIS3D_END_NAMESPACE
+
+#endif
diff --git a/src/datavis3d/engine/shaders/fragmentShader b/src/datavis3d/engine/shaders/fragmentShader
new file mode 100644
index 00000000..365f653e
--- /dev/null
+++ b/src/datavis3d/engine/shaders/fragmentShader
@@ -0,0 +1,30 @@
+varying highp vec2 UV;
+varying highp vec3 position_wrld;
+varying highp vec3 normal_cmr;
+varying highp vec3 eyeDirection_cmr;
+varying highp vec3 lightDirection_cmr;
+uniform highp vec3 lightPosition_wrld;
+uniform highp vec3 color_mdl;
+uniform highp float lightStrength;
+void main() {
+ highp vec3 materialDiffuseColor = color_mdl;
+ highp vec3 materialAmbientColor = vec3(0.5, 0.5, 0.5) * materialDiffuseColor;
+ highp vec3 materialSpecularColor = vec3(1.0, 1.0, 1.0);
+ highp float distance = length(lightPosition_wrld - position_wrld);
+ highp vec3 n = normalize(normal_cmr);
+ highp vec3 l = normalize(lightDirection_cmr);
+ highp float cosTheta = dot(n, l);
+ if (cosTheta < 0.0) { cosTheta = 0.0; }
+ if (cosTheta > 1.0) { cosTheta = 1.0; }
+ highp vec3 E = normalize(eyeDirection_cmr);
+ highp vec3 R = reflect(-l, n);
+ highp float cosAlpha = dot(E, R);
+ if (cosAlpha < 0.0) { cosAlpha = 0.0; }
+ if (cosAlpha > 1.0) { cosAlpha = 1.0; }
+ gl_FragColor.rgb = //color_mdl + color_mdl * vec3(cosTheta * cosTheta) / (distance * distance) + vec3(cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha) / (distance * distance);
+ materialAmbientColor +
+ materialDiffuseColor * lightStrength * (cosTheta * cosTheta) / distance +
+ materialSpecularColor * lightStrength * (cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha) / distance;//(distance * distance);
+ gl_FragColor.a = 1.0;
+}
+
diff --git a/src/datavis3d/engine/shaders/fragmentShaderAmbient b/src/datavis3d/engine/shaders/fragmentShaderAmbient
new file mode 100644
index 00000000..7614570e
--- /dev/null
+++ b/src/datavis3d/engine/shaders/fragmentShaderAmbient
@@ -0,0 +1,31 @@
+varying highp vec2 UV;
+varying highp vec3 position_wrld;
+varying highp vec3 normal_cmr;
+varying highp vec3 eyeDirection_cmr;
+varying highp vec3 lightDirection_cmr;
+uniform highp vec3 lightPosition_wrld;
+uniform highp vec3 color_mdl;
+void main() {
+ highp vec3 lightColor = vec3(1.0, 1.0, 1.0);
+ highp float lightPower = 10.0;
+ highp vec3 materialAmbientColor = vec3(0.5, 0.5, 0.5) * color_mdl;
+ //highp vec3 materialDiffuseColor = vec3(0.1, 0.1, 0.1) * color_mdl;
+ highp vec3 materialSpecularColor = vec3(0.3, 0.3, 0.3) * color_mdl;
+ highp float distance = length(lightPosition_wrld - position_wrld);
+ highp vec3 n = normalize(normal_cmr);
+ highp vec3 l = normalize(lightDirection_cmr);
+ highp float cosTheta = dot(n, l);
+ if (cosTheta < 0.0) { cosTheta = 0.0; }
+ if (cosTheta > 1.0) { cosTheta = 1.0; }
+ highp vec3 E = normalize(eyeDirection_cmr);
+ highp vec3 R = reflect(-l, n);
+ highp float cosAlpha = dot(E, R);
+ if (cosAlpha < 0.0) { cosAlpha = 0.0; }
+ if (cosAlpha > 1.0) { cosAlpha = 1.0; }
+ gl_FragColor.rgb =
+ materialAmbientColor +
+ //materialDiffuseColor * lightColor * lightPower * cosTheta / (distance * distance) +
+ materialSpecularColor * lightColor * lightPower * (cosAlpha * cosAlpha * cosAlpha * cosAlpha * cosAlpha) / (distance * distance);
+ gl_FragColor.a = 1.0;
+}
+
diff --git a/src/datavis3d/engine/shaders/vertexShader b/src/datavis3d/engine/shaders/vertexShader
new file mode 100644
index 00000000..19f9d617
--- /dev/null
+++ b/src/datavis3d/engine/shaders/vertexShader
@@ -0,0 +1,25 @@
+attribute highp vec3 vertexPosition_mdl;
+attribute highp vec2 vertexUV;
+attribute highp vec3 vertexNormal_mdl;
+uniform highp mat4 MVP;
+uniform highp mat4 V;
+uniform highp mat4 M;
+uniform highp mat4 itM;
+uniform highp vec3 lightPosition_wrld;
+varying highp vec2 UV;
+varying highp vec3 position_wrld;
+varying highp vec3 normal_cmr;
+varying highp vec3 eyeDirection_cmr;
+varying highp vec3 lightDirection_cmr;
+varying highp vec2 coords_mdl;
+void main() {
+ gl_Position = MVP * vec4(vertexPosition_mdl, 1.0);
+ coords_mdl = vertexPosition_mdl.xy;
+ position_wrld = (M * vec4(vertexPosition_mdl, 1.0)).xyz;
+ vec3 vertexPosition_cmr = (V * M * vec4(vertexPosition_mdl, 1.0)).xyz;
+ eyeDirection_cmr = vec3(0.0, 0.0, 0.0) - vertexPosition_cmr;
+ vec3 lightPosition_cmr = (V * vec4(lightPosition_wrld, 1.0)).xyz;
+ lightDirection_cmr = lightPosition_cmr + eyeDirection_cmr;
+ normal_cmr = (V * itM * vec4(vertexNormal_mdl, 0.0)).xyz; // Use modelMatrix's transposed inverse, as it's scaled
+ UV = vertexUV;
+}
diff --git a/src/datavis3d/global/global.pri b/src/datavis3d/global/global.pri
new file mode 100644
index 00000000..56cb9f8f
--- /dev/null
+++ b/src/datavis3d/global/global.pri
@@ -0,0 +1,5 @@
+INCLUDEPATH += $$PWD
+VPATH += $$PWD
+HEADERS += \
+ global/qdatavis3dglobal.h \
+ global/qdatavis3namespace.h
diff --git a/src/datavis3d/global/qdatavis3dglobal.h b/src/datavis3d/global/qdatavis3dglobal.h
new file mode 100644
index 00000000..1a8bebc1
--- /dev/null
+++ b/src/datavis3d/global/qdatavis3dglobal.h
@@ -0,0 +1,88 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the Qt Commercial Charts Add-on.
+**
+** $QT_BEGIN_LICENSE$
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QVIS3DGLOBAL_H
+#define QVIS3DGLOBAL_H
+
+#include <qglobal.h>
+
+#define QTCOMMERCIALDATAVIS3D_VERSION_STR "1.2.0"
+/*
+ QTCOMMERCIALDATAVIS3D_VERSION is (major << 16) + (minor << 8) + patch.
+*/
+#define QTCOMMERCIALDATAVIS3D_VERSION 0x010200
+/*
+ can be used like #if (QTCOMMERCIALDATAVIS3D_VERSION >= QTCOMMERCIALDATAVIS3D_VERSION_CHECK(1, 1, 0))
+*/
+#define QTCOMMERCIALDATAVIS3D_VERSION_CHECK(major, minor, patch) ((major<<16)|(minor<<8)|(patch))
+
+#if defined(QTCOMMERCIALDATAVIS3D_LIBRARY)
+# define QTCOMMERCIALDATAVIS3D_EXPORT Q_DECL_EXPORT
+#else
+# define QTCOMMERCIALDATAVIS3D_EXPORT Q_DECL_IMPORT
+#endif
+
+#if defined(BUILD_PRIVATE_UNIT_TESTS) && defined(QTCOMMERCIALDATAVIS3D_LIBRARY)
+# define QTCOMMERCIALDATAVIS3D_AUTOTEST_EXPORT Q_DECL_EXPORT
+#elif defined(BUILD_PRIVATE_UNIT_TESTS) && !defined(QTCOMMERCIALDATAVIS3D_LIBRARY)
+# define QTCOMMERCIALDATAVIS3D_AUTOTEST_EXPORT Q_DECL_IMPORT
+#else
+# define QTCOMMERCIALDATAVIS3D_AUTOTEST_EXPORT
+#endif
+
+#ifdef QTCOMMERCIALDATAVIS3D_STATICLIB
+# undef QTCOMMERCIALDATAVIS3D_EXPORT
+# undef QTCOMMERCIALDATAVIS3D_AUTOTEST_EXPORT
+# define QTCOMMERCIALDATAVIS3D_EXPORT
+# define QTCOMMERCIALDATAVIS3D_AUTOTEST_EXPORT
+#endif
+
+#define QTCOMMERCIALDATAVIS3D_NAMESPACE QtDataVis3D
+
+#ifdef QTCOMMERCIALDATAVIS3D_NAMESPACE
+# define QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE namespace QTCOMMERCIALDATAVIS3D_NAMESPACE {
+# define QTCOMMERCIALDATAVIS3D_END_NAMESPACE }
+# define QTCOMMERCIALDATAVIS3D_USE_NAMESPACE using namespace QTCOMMERCIALDATAVIS3D_NAMESPACE;
+#else
+# define QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE
+# define QTCOMMERCIALDATAVIS3D_END_NAMESPACE
+# define QTCOMMERCIALDATAVIS3D_USE_NAMESPACE
+#endif
+
+#if defined(DEVELOPMENT_BUILD) && !defined(QT_NO_DEBUG)
+#include <stdarg.h>
+#include <QDebug>
+
+#define CHART_DEBUG chartDebug(3,__LINE__,__FILE__,__FUNCTION__)
+
+static inline QDebug chartDebug(int numargs,...)
+{
+ va_list valist;
+ va_start(valist, numargs);
+ //for( int i = 0 ; i < numargs; i++ )
+ int line = va_arg(valist, int);
+ char *file = va_arg(valist, char *);
+ char *function = va_arg(valist, char *);
+ va_end(valist);
+ return qDebug() << QString().append(function).append("(").append(file).append(":%1)").arg(line);
+}
+#endif
+
+#endif // QVIS3DGLOBAL_H
diff --git a/src/datavis3d/global/qdatavis3namespace.h b/src/datavis3d/global/qdatavis3namespace.h
new file mode 100644
index 00000000..2e908cc0
--- /dev/null
+++ b/src/datavis3d/global/qdatavis3namespace.h
@@ -0,0 +1,145 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt3D module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QVIS3DNAMESPACE_H
+#define QVIS3DNAMESPACE_H
+
+#include <QtCore/qglobal.h>
+
+namespace QVis3D
+{
+// enum VertexAttribute {
+// Position,
+// Normal,
+// Color,
+// TextureCoord0,
+// TextureCoord1,
+// TextureCoord2,
+// CustomVertex0,
+// CustomVertex1,
+// UserVertex
+// };
+
+// enum Face
+// {
+// FrontFaces = 0x0404, // GL_FRONT
+// BackFaces = 0x0405, // GL_BACK
+// AllFaces = 0x0408 // GL_FRONT_AND_BACK
+// };
+
+// enum DrawingMode
+// {
+// Points = 0x0000, // GL_POINTS
+// Lines = 0x0001, // GL_LINES
+// LineLoop = 0x0002, // GL_LINE_LOOP
+// LineStrip = 0x0003, // GL_LINE_STRIP
+// Triangles = 0x0004, // GL_TRIANGLES
+// TriangleStrip = 0x0005, // GL_TRIANGLE_STRIP
+// TriangleFan = 0x0006, // GL_TRIANGLE_FAN
+// LinesAdjacency = 0x000A, // GL_LINES_ADJACENCY
+// LineStripAdjacency = 0x000B, // GL_LINE_STRIP_ADJACENCY
+// TrianglesAdjacency = 0x000C, // GL_TRIANGLES_ADJACENCY
+// TriangleStripAdjacency = 0x000D // GL_TRIANGLE_STRIP_ADJACENCY
+// };
+
+// enum StandardEffect
+// {
+// FlatColor,
+// FlatPerVertexColor,
+// FlatReplaceTexture2D,
+// FlatDecalTexture2D,
+// LitMaterial,
+// LitDecalTexture2D,
+// LitModulateTexture2D
+// };
+
+// enum TextureWrap
+// {
+// Repeat = 0x2901, // GL_REPEAT
+// ClampToEdge = 0x812F // GL_CLAMP_TO_EDGE
+// };
+
+// enum Eye
+// {
+// NoEye,
+// LeftEye,
+// RightEye
+// };
+
+// enum Smoothing
+// {
+// NoSmoothing,
+// Smooth,
+// Faceted
+// };
+
+// enum Mouse3DKeys
+// {
+// Key_Fit = 0x01200002,
+// Key_TopView = 0x01200003,
+// Key_LeftView = 0x01200004,
+// Key_RightView = 0x01200005,
+// Key_FrontView = 0x01200006,
+// Key_BottomView = 0x01200007,
+// Key_BackView = 0x01200008,
+// Key_RotateCW90 = 0x01200009,
+// Key_RotateCCW90 = 0x0120000a,
+// Key_ISO1 = 0x0120000b,
+// Key_ISO2 = 0x0120000c,
+// Key_Button1 = 0x0120000d,
+// Key_Button2 = 0x0120000e,
+// Key_Button3 = 0x0120000f,
+// Key_Button4 = 0x01200010,
+// Key_Button5 = 0x01200011,
+// Key_Button6 = 0x01200012,
+// Key_Button7 = 0x01200013,
+// Key_Button8 = 0x01200014,
+// Key_Button9 = 0x01200015,
+// Key_Button10 = 0x01200016,
+// Key_Rotations = 0x0120001b,
+// Key_Translations = 0x0120001c,
+// Key_DominantAxis = 0x0120001d,
+// Key_IncreaseSensitivity = 0x0120001e,
+// Key_DecreaseSensitivity = 0x0120001f
+// };
+};
+
+#endif
diff --git a/src/datavis3d/utils/camerahelper.cpp b/src/datavis3d/utils/camerahelper.cpp
new file mode 100644
index 00000000..be71d127
--- /dev/null
+++ b/src/datavis3d/utils/camerahelper.cpp
@@ -0,0 +1,103 @@
+#include "camerahelper_p.h"
+
+#include <QMatrix4x4>
+#include <QVector3D>
+
+QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE
+
+// Initial camera position
+QVector3D m_position = QVector3D(0, 0.25, 3);
+QVector3D m_target = QVector3D(0, 0, 0);
+QVector3D m_up = QVector3D(0, 1, 0);
+
+QPoint m_previousMousePos(0, 0);
+
+float m_xRotation = 0;
+float m_yRotation = 0;
+float m_defaultXRotation = 0;
+float m_defaultYRotation = 0;
+
+float m_pi = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679f;
+float m_rotationSpeed = 100;
+
+// FUNCTIONS
+void CameraHelper::setRotationSpeed(int speed)
+{
+ // increase for faster rotation
+ m_rotationSpeed = speed;
+}
+
+void CameraHelper::setCameraRotation(QPointF rotation)
+{
+ m_xRotation = rotation.x();
+ m_defaultXRotation = m_xRotation;
+ m_yRotation = rotation.y();
+ m_defaultYRotation = m_yRotation;
+}
+
+void CameraHelper::setDefaultCameraOrientation(QVector3D defaultPosition
+ , QVector3D defaultTarget
+ , QVector3D defaultUp)
+{
+ m_position = defaultPosition;
+ m_target = defaultTarget;
+ m_up = defaultUp;
+}
+
+QMatrix4x4 CameraHelper::calculateViewMatrix(QPoint mousePos, int zoom, int screenWidth, int screenHeight)
+{
+ QMatrix4x4 viewMatrix;
+
+ // Calculate mouse movement since last frame
+ float mouseMoveX = float(m_previousMousePos.x() - mousePos.x())
+ / (screenWidth / m_rotationSpeed);
+ float mouseMoveY = float(m_previousMousePos.y() - mousePos.y())
+ / (screenHeight / m_rotationSpeed);
+ // Apply to rotations
+ m_xRotation -= mouseMoveX;
+ m_yRotation -= mouseMoveY;
+ // Reset at 360 in x and limit to 0...90 in y
+ if (fabs(m_xRotation) >= 360)
+ m_xRotation = 0;
+ if (m_yRotation >= 90) {
+ m_yRotation = 90;
+ }
+ else if (m_yRotation <= 0) {
+ m_yRotation = 0;
+ }
+
+ // Apply to view matrix
+ viewMatrix.lookAt(
+ m_position // Camera is here
+ , m_target // and looks here
+ , m_up // Head is up (set to 0,-1,0 to look upside-down)
+ );
+ // Apply rotations
+ // Handle x and z rotation when y -angle is other than 0
+ viewMatrix.rotate(m_xRotation, 0, cos(m_yRotation*m_pi/180), sin(m_yRotation*m_pi/180));
+ // y rotation is always "clean"
+ viewMatrix.rotate(m_yRotation, 1.0f, 0, 0);
+ // handle zoom by scaling
+ viewMatrix.scale((float)zoom / 100.0f);
+ //qDebug() << m_xRotation << m_yRotation;
+
+ //qDebug() << "sin(m_yRotation)" << sin(m_yRotation*m_pi/180);
+ //qDebug() << "asin(m_yRotation)" << asin(m_yRotation*m_pi/180);
+ //qDebug() << "cos(m_yRotation)" << cos(m_yRotation*m_pi/180);
+ //qDebug() << "tan(m_yRotation)" << tan(m_yRotation*m_pi/180);
+
+ m_previousMousePos = mousePos;
+ return viewMatrix;
+}
+
+void CameraHelper::updateMousePos(QPoint mousePos)
+{
+ m_previousMousePos = mousePos;
+ // if mouse position is set to (0, 0), reset rotations
+ if (QPoint(0, 0) == mousePos) {
+ m_xRotation = m_defaultXRotation;
+ m_yRotation = m_defaultYRotation;
+ }
+}
+
+QTCOMMERCIALDATAVIS3D_END_NAMESPACE
diff --git a/src/datavis3d/utils/camerahelper_p.h b/src/datavis3d/utils/camerahelper_p.h
new file mode 100644
index 00000000..340eb982
--- /dev/null
+++ b/src/datavis3d/utils/camerahelper_p.h
@@ -0,0 +1,31 @@
+#ifndef CAMERAPOSITIONER_P_H
+#define CAMERAPOSITIONER_P_H
+
+#include "qdatavis3dglobal.h"
+
+class QMatrix4x4;
+class QVector3D;
+class QPoint;
+class QPointF;
+
+QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE
+
+class CameraHelper
+{
+public:
+ // How fast camera rotates when mouse is dragged. Default is 100.
+ static void setRotationSpeed(int speed);
+ // Set camera rotation in degrees
+ static void setCameraRotation(QPointF rotation);
+ // Set default camera orientation. Position's x and y should be 0.
+ static void setDefaultCameraOrientation(QVector3D defaultPosition
+ , QVector3D defaultTarget
+ , QVector3D defaultUp);
+ static QMatrix4x4 calculateViewMatrix(QPoint mousePos, int zoom
+ , int screenWidth, int screenHeight);
+ static void updateMousePos(QPoint mousePos);
+};
+
+QTCOMMERCIALDATAVIS3D_END_NAMESPACE
+
+#endif
diff --git a/src/datavis3d/utils/meshloader.cpp b/src/datavis3d/utils/meshloader.cpp
new file mode 100644
index 00000000..b94c5a46
--- /dev/null
+++ b/src/datavis3d/utils/meshloader.cpp
@@ -0,0 +1,107 @@
+#include "meshloader_p.h"
+
+#include <QFile>
+#include <QStringList>
+#include <QVector>
+#include <QVector2D>
+#include <QVector3D>
+
+#include <QDebug>
+
+QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE
+
+QString slashTag = QStringLiteral("/");
+
+bool MeshLoader::loadOBJ(QString path,
+ QVector<QVector3D> &out_vertices,
+ QVector<QVector2D> &out_uvs,
+ QVector<QVector3D> &out_normals)
+{
+ qDebug() << "Loading OBJ file" << path;
+
+ QVector<unsigned int> vertexIndices, uvIndices, normalIndices;
+ QVector<QVector3D> temp_vertices;
+ QVector<QVector2D> temp_uvs;
+ QVector<QVector3D> temp_normals;
+
+ QFile file(path);
+ if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ qWarning("Cannot open the file");
+ return false;
+ }
+
+ QTextStream textIn(&file);
+ while (!textIn.atEnd()) {
+ QString line = textIn.readLine();
+ QStringList lineContents = line.split(QStringLiteral(" "));
+ if (!lineContents.at(0).compare(QStringLiteral("v"))) {
+ QVector3D vertex;
+ vertex.setX(lineContents.at(1).toFloat());
+ vertex.setY(lineContents.at(2).toFloat());
+ vertex.setZ(lineContents.at(3).toFloat());
+ temp_vertices.append(vertex);
+ }
+ else if (!lineContents.at(0).compare(QStringLiteral("vt"))) {
+ QVector2D uv;
+ uv.setX(lineContents.at(1).toFloat());
+ uv.setY(lineContents.at(2).toFloat()); // invert this if using DDS textures
+ temp_uvs.append(uv);
+ }
+ else if (!lineContents.at(0).compare(QStringLiteral("vn"))) {
+ QVector3D normal;
+ normal.setX(lineContents.at(1).toFloat());
+ normal.setY(lineContents.at(2).toFloat());
+ normal.setZ(lineContents.at(3).toFloat());
+ temp_normals.append(normal);
+ }
+ else if (!lineContents.at(0).compare(QStringLiteral("f"))) {
+ unsigned int vertexIndex[3], uvIndex[3], normalIndex[3];
+ QStringList set1 = lineContents.at(1).split(slashTag);
+ QStringList set2 = lineContents.at(2).split(slashTag);
+ QStringList set3 = lineContents.at(3).split(slashTag);
+ vertexIndex[0] = set1.at(0).toUInt();
+ vertexIndex[1] = set2.at(0).toUInt();
+ vertexIndex[2] = set3.at(0).toUInt();
+ uvIndex[0] = set1.at(1).toUInt();
+ uvIndex[1] = set2.at(1).toUInt();
+ uvIndex[2] = set3.at(1).toUInt();
+ normalIndex[0] = set1.at(2).toUInt();
+ normalIndex[1] = set2.at(2).toUInt();
+ normalIndex[2] = set3.at(2).toUInt();
+ vertexIndices.append(vertexIndex[0]);
+ vertexIndices.append(vertexIndex[1]);
+ vertexIndices.append(vertexIndex[2]);
+ uvIndices.append(uvIndex[0]);
+ uvIndices.append(uvIndex[1]);
+ uvIndices.append(uvIndex[2]);
+ normalIndices.append(normalIndex[0]);
+ normalIndices.append(normalIndex[1]);
+ normalIndices.append(normalIndex[2]);
+ }
+ else {
+ //qWarning("Line did not contain usable data");
+ }
+ }
+
+ // For each vertex of each triangle
+ for (int i = 0; i < vertexIndices.size(); i++) {
+ // Get the indices of its attributes
+ unsigned int vertexIndex = vertexIndices[i];
+ unsigned int uvIndex = uvIndices[i];
+ unsigned int normalIndex = normalIndices[i];
+
+ // Get the attributes thanks to the index
+ QVector3D vertex = temp_vertices[vertexIndex - 1];
+ QVector2D uv = temp_uvs[uvIndex - 1];
+ QVector3D normal = temp_normals[normalIndex - 1];
+
+ // Put the attributes in buffers
+ out_vertices.append(vertex);
+ out_uvs.append(uv);
+ out_normals.append(normal);
+ }
+
+ return true;
+}
+
+QTCOMMERCIALDATAVIS3D_END_NAMESPACE
diff --git a/src/datavis3d/utils/meshloader_p.h b/src/datavis3d/utils/meshloader_p.h
new file mode 100644
index 00000000..4507ceb7
--- /dev/null
+++ b/src/datavis3d/utils/meshloader_p.h
@@ -0,0 +1,23 @@
+#ifndef MESHLOADER_P_H
+#define MESHLOADER_P_H
+
+#include "qdatavis3dglobal.h"
+
+class QVector2D;
+class QVector3D;
+
+QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE
+
+class MeshLoader
+{
+public:
+ static bool loadOBJ(QString path,
+ QVector<QVector3D> &out_vertices,
+ QVector<QVector2D> &out_uvs,
+ QVector<QVector3D> &out_normals);
+ // TODO: add loaders for other formats?
+};
+
+QTCOMMERCIALDATAVIS3D_END_NAMESPACE
+
+#endif
diff --git a/src/datavis3d/utils/utils.pri b/src/datavis3d/utils/utils.pri
new file mode 100644
index 00000000..c62340d1
--- /dev/null
+++ b/src/datavis3d/utils/utils.pri
@@ -0,0 +1,7 @@
+HEADERS += $$PWD/meshloader_p.h \
+ $$PWD/vertexindexer_p.h \
+ $$PWD/camerahelper_p.h
+
+SOURCES += $$PWD/meshloader.cpp \
+ $$PWD/vertexindexer.cpp \
+ $$PWD/camerahelper.cpp
diff --git a/src/datavis3d/utils/vertexindexer.cpp b/src/datavis3d/utils/vertexindexer.cpp
new file mode 100644
index 00000000..c54cbf8a
--- /dev/null
+++ b/src/datavis3d/utils/vertexindexer.cpp
@@ -0,0 +1,137 @@
+#include "vertexindexer_p.h"
+
+#include <string.h> // for memcmp
+
+#include <QDebug>
+
+QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE
+
+int unique_vertices = 0;
+
+// Returns true if v1 can be considered equal to v2
+bool VertexIndexer::is_near(float v1, float v2)
+{
+ return fabs(v1 - v2) < 0.01f;
+}
+
+// Searches through all already-exported vertices
+// for a similar one.
+// Similar = same position + same UVs + same normal
+bool VertexIndexer::getSimilarVertexIndex(QVector3D &in_vertex
+ , QVector2D &in_uv
+ , QVector3D &in_normal
+ , QVector<QVector3D> &out_vertices
+ , QVector<QVector2D> &out_uvs
+ , QVector<QVector3D> &out_normals
+ , unsigned short &result)
+{
+ // Lame linear search
+ for (int i = 0; i < out_vertices.size(); i++) {
+ if (is_near(in_vertex.x() , out_vertices[i].x())
+ && is_near(in_vertex.y() , out_vertices[i].y())
+ && is_near(in_vertex.z() , out_vertices[i].z())
+ && is_near(in_uv.x() , out_uvs [i].x())
+ && is_near(in_uv.y() , out_uvs [i].y())
+ && is_near(in_normal.x() , out_normals [i].x())
+ && is_near(in_normal.y() , out_normals [i].y())
+ && is_near(in_normal.z() , out_normals [i].z())) {
+ result = i;
+ return true;
+ }
+ }
+ // No other vertex could be used instead.
+ // Looks like we'll have to add it to the VBO.
+ return false;
+}
+
+bool VertexIndexer::getSimilarVertexIndex_fast(PackedVertex &packed
+ , QMap<PackedVertex, unsigned short> &VertexToOutIndex
+ , unsigned short &result)
+{
+ QMap<PackedVertex, unsigned short>::iterator it = VertexToOutIndex.find(packed);
+ if (it == VertexToOutIndex.end()) {
+ return false;
+ }
+ else {
+ result = it.value();
+ return true;
+ }
+}
+
+void VertexIndexer::indexVBO(QVector<QVector3D> &in_vertices
+ , QVector<QVector2D> &in_uvs
+ , QVector<QVector3D> &in_normals
+ , QVector<unsigned short> &out_indices
+ , QVector<QVector3D> &out_vertices
+ , QVector<QVector2D> &out_uvs
+ , QVector<QVector3D> &out_normals)
+{
+ unique_vertices = 0;
+ QMap<PackedVertex, unsigned short> VertexToOutIndex;
+
+ // For each input vertex
+ for (int i = 0; i < in_vertices.size(); i++) {
+ PackedVertex packed = {in_vertices[i], in_uvs[i], in_normals[i]};
+
+ // Try to find a similar vertex in out_XXXX
+ unsigned short index;
+ bool found = getSimilarVertexIndex_fast(packed, VertexToOutIndex, index);
+
+ if (found) { // A similar vertex is already in the VBO, use it instead !
+ out_indices.append(index);
+ }
+ else { // If not, it needs to be added in the output data.
+ unique_vertices++;
+ out_vertices.append(in_vertices[i]);
+ out_uvs.append(in_uvs[i]);
+ out_normals.append(in_normals[i]);
+ unsigned short newindex = (unsigned short)out_vertices.size() - 1;
+ out_indices.append(newindex);
+ VertexToOutIndex[packed] = newindex;
+ }
+ }
+ qDebug() << "unique vertices" << unique_vertices;
+}
+
+void VertexIndexer::indexVBO_TBN(QVector<QVector3D> &in_vertices
+ , QVector<QVector2D> &in_uvs
+ , QVector<QVector3D> &in_normals
+ , QVector<QVector3D> &in_tangents
+ , QVector<QVector3D> &in_bitangents
+ , QVector<unsigned short> &out_indices
+ , QVector<QVector3D> &out_vertices
+ , QVector<QVector2D> &out_uvs
+ , QVector<QVector3D> &out_normals
+ , QVector<QVector3D> &out_tangents
+ , QVector<QVector3D> &out_bitangents)
+{
+ unique_vertices = 0;
+ // For each input vertex
+ for (int i = 0; i < in_vertices.size(); i++) {
+
+ // Try to find a similar vertex in out_XXXX
+ unsigned short index;
+ bool found = getSimilarVertexIndex(in_vertices[i], in_uvs[i], in_normals[i]
+ , out_vertices, out_uvs, out_normals, index);
+
+ if (found) { // A similar vertex is already in the VBO, use it instead !
+ out_indices.append(index);
+
+ // Average the tangents and the bitangents
+ out_tangents[index] += in_tangents[i];
+ out_bitangents[index] += in_bitangents[i];
+ }
+ else { // If not, it needs to be added in the output data.
+ unique_vertices++;
+ out_vertices.append(in_vertices[i]);
+ out_uvs.append(in_uvs[i]);
+ out_normals.append(in_normals[i]);
+ out_tangents.append(in_tangents[i]);
+ out_bitangents.append(in_bitangents[i]);
+ out_indices.append((unsigned short)out_vertices.size() - 1);
+ }
+ }
+ qDebug() << "unique vertices" << unique_vertices;
+}
+
+QTCOMMERCIALDATAVIS3D_END_NAMESPACE
diff --git a/src/datavis3d/utils/vertexindexer_p.h b/src/datavis3d/utils/vertexindexer_p.h
new file mode 100644
index 00000000..f784756e
--- /dev/null
+++ b/src/datavis3d/utils/vertexindexer_p.h
@@ -0,0 +1,60 @@
+#ifndef VERTEXINDEXER_P_H
+#define VERTEXINDEXER_P_H
+
+#include "qdatavis3dglobal.h"
+
+#include <QVector>
+#include <QVector2D>
+#include <QVector3D>
+
+QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE
+
+class VertexIndexer
+{
+ public:
+ struct PackedVertex {
+ QVector3D position;
+ QVector2D uv;
+ QVector3D normal;
+ bool operator<(const PackedVertex that) const {
+ return memcmp((void*)this, (void*)&that, sizeof(PackedVertex)) > 0;
+ }
+ };
+
+ static void indexVBO(QVector<QVector3D> &in_vertices
+ , QVector<QVector2D> &in_uvs
+ , QVector<QVector3D> &in_normals
+ , QVector<unsigned short> &out_indices
+ , QVector<QVector3D> &out_vertices
+ , QVector<QVector2D> &out_uvs
+ , QVector<QVector3D> &out_normals);
+
+ static void indexVBO_TBN(QVector<QVector3D> &in_vertices
+ , QVector<QVector2D> &in_uvs
+ , QVector<QVector3D> &in_normals
+ , QVector<QVector3D> &in_tangents
+ , QVector<QVector3D> &in_bitangents
+ , QVector<unsigned short> &out_indices
+ , QVector<QVector3D> &out_vertices
+ , QVector<QVector2D> &out_uvs
+ , QVector<QVector3D> &out_normals
+ , QVector<QVector3D> &out_tangents
+ , QVector<QVector3D> &out_bitangents);
+
+ private:
+ static bool is_near(float v1, float v2);
+ static bool getSimilarVertexIndex(QVector3D &in_vertex
+ , QVector2D &in_uv
+ , QVector3D &in_normal
+ , QVector<QVector3D> &out_vertices
+ , QVector<QVector2D> &out_uvs
+ , QVector<QVector3D> &out_normals
+ , unsigned short &result);
+ static bool getSimilarVertexIndex_fast(PackedVertex &packed
+ , QMap<PackedVertex, unsigned short> &VertexToOutIndex
+ , unsigned short &result);
+};
+
+QTCOMMERCIALDATAVIS3D_END_NAMESPACE
+
+#endif