diff --git a/Assignments/A2/A2Soln/Makefile b/Assignments/A2/A2Soln/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..04778e5956337331f11c95a1417b27d8b4268ee8
--- /dev/null
+++ b/Assignments/A2/A2Soln/Makefile
@@ -0,0 +1,19 @@
+PY = pytest
+PYFLAGS = --cov
+DOXY = doxygen
+DOXYCFG = doxConfig
+
+RMDIR = rm -rf
+
+.PHONY: test doc clean
+
+test:
+	$(PY) $(PYFLAGS) src
+
+doc:
+	$(DOXY) $(DOXYCFG)
+	cd latex && $(MAKE)
+
+clean:
+	@- $(RMDIR) html
+	@- $(RMDIR) latex
diff --git a/Assignments/A2/A2Soln/doxConfig b/Assignments/A2/A2Soln/doxConfig
new file mode 100644
index 0000000000000000000000000000000000000000..a2ac78f24d4302e84dc279e83113ba433daef51d
--- /dev/null
+++ b/Assignments/A2/A2Soln/doxConfig
@@ -0,0 +1,2496 @@
+# Doxyfile 1.8.13
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single 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
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
+PROJECT_NAME           = "Assignment 2"
+
+# 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         =
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          =
+
+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
+# in the documentation. The maximum height of the logo should not exceed 55
+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+# the logo to the output directory.
+
+PROJECT_LOGO           =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. 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       =
+
+# 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 causes
+# performance problems for the file system.
+# The default value is: NO.
+
+CREATE_SUBDIRS         = NO
+
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES    = 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.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES, 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.
+# The default value is: YES.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES, 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.
+# The default value is: YES.
+
+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 and the.
+
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+
+# 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.
+# The default value is: NO.
+
+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.
+# The default value is: NO.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES, 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
+# The default value is: YES.
+
+FULL_PATH_NAMES        = YES
+
+# 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.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
+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 list of 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.
+# The default value is: NO.
+
+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-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_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 behavior. 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 behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
+
+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.
+# The default value is: NO.
+
+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.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE               = 4
+
+# This tag can be used to specify a number of aliases that act 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                =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
+
+TCL_SUBST              =
+
+# 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.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
+#
+# Note: For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT       = YES
+
+# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
+# to that level are automatically included in the table of contents, even if
+# they do not have an id attribute.
+# Note: This feature currently applies only to Markdown headings.
+# Minimum value: 0, maximum value: 99, default value: 0.
+# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
+
+TOC_INCLUDE_HEADINGS   = 0
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT       = YES
+
+# 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);
+# versus func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_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.
+# The default value is: NO.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# If one adds a struct or class to a group and this option is enabled, then also
+# any nested class or struct is added to the same group. By default this option
+# is disabled and one has to add nested compounds explicitly via \ingroup.
+# The default value is: NO.
+
+GROUP_NESTED_COMPOUNDS = NO
+
+# Set the SUBGROUPING tag to YES 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.
+# The default value is: YES.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# 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 respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
+
+EXTRACT_STATIC         = NO
+
+# 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. Does not have any effect
+# for Java sources.
+# The default value is: YES.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. If 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, only methods in the interface are
+# included.
+# The default value is: NO.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO 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.
+# The default value is: NO.
+
+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, these classes will be included in the various overviews. This option
+# has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+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, these declarations will be
+# included in the documentation.
+# The default value is: NO.
+
+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, these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
+
+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 then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
+
+INTERNAL_DOCS          = NO
+
+# 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.
+# The default value is: system dependent.
+
+CASE_SENSE_NAMES       = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES, the
+# scope will be hidden.
+# The default value is: NO.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
+# append additional text to a page's title, such as Class Reference. If set to
+# YES the compound reference will be hidden.
+# The default value is: NO.
+
+HIDE_COMPOUND_REFERENCE= NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC  = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES 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.
+# The default value is: YES.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES       = NO
+
+# 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 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.
+# The default value is: NO.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING  = NO
+
+# 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.
+# The default value is: YES.
+
+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.
+# The default value is: YES.
+
+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.
+# The default value is: YES.
+
+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.
+# The default value is: YES.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have 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 value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
+
+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.
+# The default value is: YES.
+
+SHOW_USED_FILES        = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
+SHOW_NAMESPACES        = 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. For an example see the documentation.
+
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE            =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. See also \cite for info how to create references.
+
+CITE_BIB_FILES         =
+
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
+
+WARNINGS               = YES
+
+# If the WARN_IF_UNDOCUMENTED tag 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.
+# The default value is: YES.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If the WARN_IF_DOC_ERROR tag 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.
+# The default value is: YES.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO, doxygen will only warn about wrong or incomplete
+# parameter documentation, but not about the absence of documentation.
+# The default value is: NO.
+
+WARN_NO_PARAMDOC       = NO
+
+# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
+# a warning is encountered.
+# The default value is: NO.
+
+WARN_AS_ERROR          = 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)
+# The default value is: $file:$line: $text.
+
+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 standard
+# error (stderr).
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag is 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. See also FILE_PATTERNS and EXTENSION_MAPPING
+# Note: If this tag is empty the current directory is searched.
+
+INPUT                  = src/CurveADT.py \
+                         src/Data.py \
+                         src/Load.py \
+                         src/Plot.py \
+                         src/SeqServices.py
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# read by doxygen.
+#
+# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
+# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
+# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
+# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
+# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf.
+
+FILE_PATTERNS          = *.c \
+                         *.cc \
+                         *.cxx \
+                         *.cpp \
+                         *.c++ \
+                         *.java \
+                         *.ii \
+                         *.ixx \
+                         *.ipp \
+                         *.i++ \
+                         *.inl \
+                         *.idl \
+                         *.ddl \
+                         *.odl \
+                         *.h \
+                         *.hh \
+                         *.hxx \
+                         *.hpp \
+                         *.h++ \
+                         *.cs \
+                         *.d \
+                         *.php \
+                         *.php4 \
+                         *.php5 \
+                         *.phtml \
+                         *.inc \
+                         *.m \
+                         *.markdown \
+                         *.md \
+                         *.mm \
+                         *.dox \
+                         *.py \
+                         *.pyw \
+                         *.f90 \
+                         *.f95 \
+                         *.f03 \
+                         *.f08 \
+                         *.f \
+                         *.for \
+                         *.tcl \
+                         *.vhd \
+                         *.vhdl \
+                         *.ucf \
+                         *.qsf
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# 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.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE                =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+# The default value is: NO.
+
+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/*
+
+EXCLUDE_PATTERNS       =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
+
+EXCLUDE_SYMBOLS        =
+
+# 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.
+# The default value is: NO.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be 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.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
+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 information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
+FILTER_PATTERNS        =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE =
+
+#---------------------------------------------------------------------------
+# 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 that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS        = 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.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set the YES 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.
+# See also: Section \class.
+# The default value is: YES.
+
+VERBATIM_HEADERS       = YES
+
+# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
+# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
+# cost of reduced performance. This can be particularly helpful with template
+# rich C++ code for which doxygen's built-in parser lacks the necessary type
+# information.
+# Note: The availability of this option depends on whether or not doxygen was
+# generated with the -Duse-libclang=ON option for CMake.
+# The default value is: NO.
+
+CLANG_ASSISTED_PARSING = NO
+
+# If clang assisted parsing is enabled you can provide the compiler with command
+# line options that you would normally use when invoking the compiler. Note that
+# the include paths will already be set by doxygen for the files and directories
+# specified with INPUT and INCLUDE_PATH.
+# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
+
+CLANG_OPTIONS          =
+
+#---------------------------------------------------------------------------
+# 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.
+# The default value is: YES.
+
+ALPHABETICAL_INDEX     = YES
+
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+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 a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
+# The default value is: YES.
+
+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.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
+# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER            =
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+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 left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_STYLESHEET        =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefore more robust against future updates.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list). For an example see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_STYLESHEET  =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES       =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the style sheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to YES can help to show when doxygen was last run and thus if the
+# documentation is up to date.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_TIMESTAMP         = NO
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see: http://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_DOCSET        = NO
+
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_HTMLHELP      = NO
+
+# 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.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_FILE               =
+
+# 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.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+HHC_LOCATION           =
+
+# 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).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+GENERATE_CHI           = NO
+
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_INDEX_ENCODING     =
+
+# 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. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+DISABLE_INDEX          = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value 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
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_TREEVIEW      = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# 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.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+TREEVIEW_WIDTH         = 250
+
+# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT         = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from http://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS     =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE       =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript. There
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
+# setting. When disabled, doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SERVER_BASED_SEARCH    = NO
+
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH        = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/). See the section "External Indexing and
+# Searching" for details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHENGINE_URL       =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHDATA_FILE        = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH_ID     =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTRA_SEARCH_MAPPINGS  =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
+# The default value is: YES.
+
+GENERATE_LATEX         = YES
+
+# 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.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked.
+#
+# Note that when enabling USE_PDFLATEX this option is only used for generating
+# bitmaps for formulas in the HTML output, but not in the Makefile that is
+# written to the output directory.
+# The default file is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+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.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+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 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PAPER_TYPE             = a4
+
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. The package can be specified just
+# by its name or with the correct syntax as to be used with the LaTeX
+# \usepackage command. To get the times font for instance you can specify :
+# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
+# To use the option intlimits with the amsmath package you can specify:
+# EXTRA_PACKAGES=[intlimits]{amsmath}
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+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. See
+# section "Doxygen usage" for information on how to let doxygen write the
+# default header to a separate file.
+#
+# Note: Only use a user-defined header if you know what you are doing! The
+# following commands have a special meaning inside the header: $title,
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
+# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
+# string, for the replacement values of the other commands the user is referred
+# to HTML_HEADER.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HEADER           =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+# generated LaTeX document. The footer should contain everything after the last
+# chapter. If it is left blank doxygen will generate a standard footer. See
+# LATEX_HEADER for more information on how to generate a default footer and what
+# special commands can be used inside the footer.
+#
+# Note: Only use a user-defined footer if you know what you are doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_FOOTER           =
+
+# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# LaTeX style sheets that are included after the standard style sheets created
+# by doxygen. Using this option one can overrule certain style aspects. Doxygen
+# will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list).
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_STYLESHEET =
+
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_FILES      =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). 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.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES, to get a
+# higher quality PDF documentation.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+USE_PDFLATEX           = YES
+
+# 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.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BATCHMODE        = NO
+
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HIDE_INDICES     = NO
+
+# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+# code with syntax highlighting in the LaTeX output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. See
+# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BIB_STYLE        = plain
+
+# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
+# page will contain the date and time when the page was generated. Setting this
+# to NO can help when comparing the output of multiple runs.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_TIMESTAMP        = 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 too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
+
+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.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+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.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+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 some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+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.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's config file. A template extensions file can be generated
+# using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_EXTENSIONS_FILE    =
+
+# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
+# with syntax highlighting in the RTF output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_SOURCE_CODE        = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
+
+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. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_EXTENSION          = .3
+
+# The MAN_SUBDIR tag determines the name of the directory created within
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
+# MAN_EXTENSION with the initial . removed.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_SUBDIR             =
+
+# 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 value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+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.
+# The default value is: NO.
+
+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.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_OUTPUT             = xml
+
+# 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.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
+
+GENERATE_DOCBOOK       = NO
+
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_OUTPUT         = docbook
+
+# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
+# program listings (including syntax highlighting and cross-referencing
+# information) to the DOCBOOK output. Note that enabling this will significantly
+# increase the size of the DOCBOOK output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_PROGRAMLISTING = NO
+
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
+# AutoGen Definitions (see http://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.
+# The default value is: NO.
+
+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.
+# The default value is: NO.
+
+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.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+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.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+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.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
+
+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, only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+MACRO_EXPANSION        = NO
+
+# 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.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES, the include files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+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.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
+
+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.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+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 e.g.
+# 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.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+PREDEFINED             =
+
+# 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 that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+# remove all references to 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.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. 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. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: 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. See section "Linking to
+# external documentation" for more information about the usage of tag files.
+
+GENERATE_TAGFILE       =
+
+# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
+# the class index. If set to NO, only the inherited external classes will be
+# listed.
+# The default value is: NO.
+
+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.
+# The default value is: YES.
+
+EXTERNAL_GROUPS        = YES
+
+# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES         = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of 'which perl').
+# The default file (with absolute path) is: /usr/bin/perl.
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
+# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
+# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+# disabled, but it is recommended to install and use dot, since it yields more
+# powerful graphs.
+# The default value is: YES.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see:
+# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH            =
+
+# You can include diagrams made with dia in doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+# If left empty dia is assumed to be found in the default search path.
+
+DIA_PATH               =
+
+# 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.
+# The default value is: YES.
+
+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 (see:
+# http://www.graphviz.org/), 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 value is: NO.
+
+HAVE_DOT               = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_NUM_THREADS        = 0
+
+# When you want a differently looking font in the dot files that doxygen
+# generates you can specify the font name using DOT_FONTNAME. You need to make
+# sure dot is able to find the font, which can be done by putting it in a
+# standard location or by setting the DOTFONTPATH environment variable or by
+# setting DOT_FONTPATH to the directory containing the font.
+# The default value is: Helvetica.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH tag is 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 CLASS_DIAGRAMS tag to NO.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH tag is 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.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+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.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LOOK               = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDE_GRAPH          = YES
+
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES 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.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH tag is 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. Disabling a call graph can be
+# accomplished by means of the command \hidecallgraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# 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 caller graphs for selected
+# functions only using the \callergraph command. Disabling a caller graph can be
+# accomplished by means of the command \hidecallergraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH tag is 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.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. For an explanation of the image formats see the section
+# output formats in the documentation of the dot tool (Graphviz (see:
+# http://www.graphviz.org/)).
+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+# to make the SVG files visible in IE 9+ (other browsers do not have this
+# requirement).
+# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
+# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
+# png:gdiplus:gdiplus.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_IMAGE_FORMAT       = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
+# the SVG files visible. Older versions of IE do not have SVG support.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INTERACTIVE_SVG        = NO
+
+# The DOT_PATH tag 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.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+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).
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOTFILE_DIRS           =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
+
+MSCFILE_DIRS           =
+
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
+
+DIAFILE_DIRS           =
+
+# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
+# path where java can find the plantuml.jar file. If left blank, it is assumed
+# PlantUML is not used or called during a preprocessing step. Doxygen will
+# generate a warning when it encounters a \startuml command in this case and
+# will not generate output for the diagram.
+
+PLANTUML_JAR_PATH      =
+
+# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
+# configuration file for plantuml.
+
+PLANTUML_CFG_FILE      =
+
+# When using plantuml, the specified paths are searched for files specified by
+# the !include statement in a plantuml block.
+
+PLANTUML_INCLUDE_PATH  =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 1
+# or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# 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).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES to 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.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
+# files that are used to generate the various graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_CLEANUP            = YES
diff --git a/Assignments/A2/A2Soln/partner/CurveADT.py b/Assignments/A2/A2Soln/partner/CurveADT.py
new file mode 100644
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/Assignments/A2/A2Soln/partner/CurveADT.py
@@ -0,0 +1 @@
+
diff --git a/Assignments/A2/A2Soln/partner/Data.py b/Assignments/A2/A2Soln/partner/Data.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Assignments/A2/A2Soln/partner/SeqServices.py b/Assignments/A2/A2Soln/partner/SeqServices.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Assignments/A2/A2Soln/report/report.pdf b/Assignments/A2/A2Soln/report/report.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..2a51abb916e7fdba4bfbd0e929c78623c55635c0
Binary files /dev/null and b/Assignments/A2/A2Soln/report/report.pdf differ
diff --git a/Assignments/A2/A2Soln/report/report.tex b/Assignments/A2/A2Soln/report/report.tex
new file mode 100644
index 0000000000000000000000000000000000000000..5d2fb5d54fba3f2589b668acd3d5a46142cabd2d
--- /dev/null
+++ b/Assignments/A2/A2Soln/report/report.tex
@@ -0,0 +1,137 @@
+\documentclass[12pt]{article}
+
+\usepackage{graphicx}
+\usepackage{paralist}
+\usepackage{listings}
+\usepackage{booktabs}
+
+\oddsidemargin 0mm
+\evensidemargin 0mm
+\textwidth 160mm
+\textheight 200mm
+
+\pagestyle {plain}
+\pagenumbering{arabic}
+
+\newcounter{stepnum}
+
+\title{Assignment 2 Solution}
+\author{Henry M. 000000000}
+\date{\today}
+
+\begin {document}
+
+\maketitle
+
+Introductory blurb.
+
+\section{Testing of the Original Program}
+
+Description of approach to testing.  Rationale for test case selection.  Summary
+of results.  Any problems uncovered through testing.
+
+\section{Results of Testing Partner's Code}
+
+Summary of results.
+
+\section{Discussion of Test Results}
+
+\subsection{Problems with Original Code}
+
+\subsection{Problems with Partner's Code}
+
+\subsection{Problems with Assignment Specification}
+
+\section{Answers}
+
+\begin{enumerate}
+
+\item What is the mathematical specification of the \texttt{SeqServices} access
+  program isInBounds(X, x) if the assumption that X is ascending is removed?
+
+output: $:= \exists\,( i, j \,|\, i, j \in [0..|X| - 1] : X_i \leq x \leq X_j )$
+\\exception: none
+
+\item How would you modify \texttt{CurveADT.py} to support cubic interpolation?
+\begin{enumerate}
+  \item modify MAX\_ORDER constant in curveADT from 2 to 3
+  \item Add an access program, interpCubic that calls scipy with interp1d with kind=3
+\end{enumerate}
+
+
+\item What is your critique of the CurveADT module's interface.  In particular,
+  comment on whether the exported access programs provide an interface that is
+  consistent, essential, general, minimal and opaque.
+
+- exceptions should be in SeqServices
+
+\item What is your critique of the Data abstract object's interface.  In
+  particular, comment on whether the exported access programs provide an
+  interface that is consistent, essential, general, minimal and opaque.
+
+- no size method
+
+\end{enumerate}
+
+\newpage
+
+\lstset{language=Python, basicstyle=\tiny, breaklines=true, showspaces=false,
+  showstringspaces=false, breakatwhitespace=true}
+%\lstset{language=C,linewidth=.94\textwidth,xleftmargin=1.1cm}
+
+\def\thesection{\Alph{section}}
+
+\section{Code for CurveADT.py}
+
+\noindent \lstinputlisting{../src/CurveADT.py}
+
+\newpage
+
+\section{Code for Data.py}
+
+\noindent \lstinputlisting{../src/Data.py}
+
+\newpage
+
+\section{Code for SeqServices.py}
+
+\noindent \lstinputlisting{../src/SeqServices.py}
+
+\newpage
+
+\section{Code for Plot.py}
+
+\noindent \lstinputlisting{../src/Plot.py}
+
+\newpage
+
+\section{Code for Load.py}
+
+\noindent \lstinputlisting{../src/Load.py}
+
+\newpage
+
+\section{Code for Partner's CurveADT.py}
+
+\noindent \lstinputlisting{../partner/CurveADT.py}
+
+\newpage
+
+\section{Code for Partner's Data.py}
+
+\noindent \lstinputlisting{../partner/Data.py}
+
+\newpage
+
+\section{Code for Partner's SeqServices.py}
+
+\noindent \lstinputlisting{../partner/SeqServices.py}
+
+\newpage
+
+\section{Makefile}
+
+\lstset{language=make}
+\noindent \lstinputlisting{../Makefile}
+
+\end {document}
diff --git a/Assignments/A2/A2Soln/src/A2Examples.py b/Assignments/A2/A2Soln/src/A2Examples.py
new file mode 100644
index 0000000000000000000000000000000000000000..fb5f217ed9d0e056b9bb84a5bc41ace582ea7cd6
--- /dev/null
+++ b/Assignments/A2/A2Soln/src/A2Examples.py
@@ -0,0 +1,33 @@
+#from CurveADT import *
+from CurveADTscipy import *
+from Data import *
+from Load import *
+from Plot import *
+
+X = range(11)
+Y = list(map(lambda x: x**2, X))
+
+c1 = CurveT(X, Y, 1)
+
+print(c1.eval(6.5))
+
+PlotCurve(c1, 50)
+
+c2 = CurveT(X, Y, 2)
+
+print(c2.eval(6.5))
+
+PlotCurve(c2, 5)
+#PlotCurve(c2, 50) will look strange because of edge effects
+#scipy and lambda version for A2 have same behaviour
+
+Load('glass.csv')
+
+c3 = Data.getC(9)
+PlotCurve(c3, 50)
+print(Data.eval(18, 34))
+
+c4 = Data.slice(18, 1)
+PlotCurve(c4, 50)
+print(c4.eval(34))
+
diff --git a/Assignments/A2/A2Soln/src/CurveADT.py b/Assignments/A2/A2Soln/src/CurveADT.py
new file mode 100644
index 0000000000000000000000000000000000000000..993458584df52f731328f2e0496eba14f2381584
--- /dev/null
+++ b/Assignments/A2/A2Soln/src/CurveADT.py
@@ -0,0 +1,87 @@
+## @file CurveT.py
+#  @author Steven Palmer and Henry Madej
+#  @brief CurveT
+#  @date 20/02/2018
+
+from Exceptions import *
+from SeqServices import *
+
+
+
+
+## @brief An abstract data type that represents a Curve
+class CurveT:
+
+  MAX_ORDER = 2
+  DX = 1E-3
+
+  ## @brief CurveT constructor
+  #  @details takes two lists of of x's and y's where the values are sorted in 
+  #  ascending order, and order i of the function representing the curve
+  #  @param X list of x values sorted in ascending order
+  #  @param Y list of corresponding y values to the the x's in the X list
+  #  @param i order of the function represented by the data points (x,y) pairs
+  def __init__(self, X, Y, i):
+    if not isAscending(X):
+      raise IndepVarNotAscending
+    if i < 1 or i > CurveT.MAX_ORDER:
+      raise InvalidInterpOrder
+    if len(X) != len(Y):
+      raise SeqSizeMismatch
+      
+    self.__minx = X[0] 
+    self.__maxx = X[-1]
+    self.__o = i
+    
+    if self.__o == 1:
+      self.__f = lambda v: interpLin(X[index(X, v)], Y[index(X, v)], X[index(X, v) + 1], Y[index(X, v) + 1], v)  
+    elif self.__o == 2:
+      self.__f = lambda v: interpQuad(X[index(X, v) - 1], Y[index(X, v) - 1], X[index(X, v)], Y[index(X, v)], X[index(X, v) + 1], Y[index(X, v) + 1], v)
+  
+  ## @brief minD returns the minimal x value
+  #  @return value representing the minimal x value
+  def minD(self):
+    return self.__minx
+  
+  ## @brief maxD returns the maximal x value
+  #  @return value representing the maximal x value
+  def maxD(self):
+    return self.__maxx
+    
+
+  ## @brief order returns the order of the function represented by the curve
+  #  @return the value of the order of the curve
+  def order(self):
+    return self.__o
+  
+
+  ## @brief eval evaluates the function at a given x value
+  #  @details if x is within the range of x values for the curve it will return
+  #           a y value for the curve
+  #  @param x value of x to evaluate the curve at
+  #  @exception OutOfDomain - if x value is not within the range of the curve's 
+  #             x values
+  #  @return the value of the curve at x
+  def eval(self, x):
+    if x < self.__minx or x > self.__maxx:
+      raise OutOfDomain
+    return self.__f(x)
+
+
+  ## @brief approximates the first derivate of the curve
+  #  @details uses forward divided difference
+  #  @param x value of x for the first derivate to be evaluated at
+  #  @return the value of the first derivate at evaluated x
+  def dfdx(self, x):
+    if x < self.__minx or x > self.__maxx:
+      raise OutOfDomain
+    return self.__f(x + self.DX) - self.__f(x) / self.DX
+
+  ## @brief approximates the second derivate of the curve
+  #  @details uses forward divided difference
+  #  @param x value of x for the second derivate to be evaluated at
+  #  @return the value of the second derivate at evaluated x
+  def d2fdx2(self, x):
+    if x < self.__minx or x > self.__maxx:
+      raise OutOfDomain
+    return self.__f(x + 2*self.DX) - 2*self.__f(x + self.DX) + self.__f(x) / self.DX**2
\ No newline at end of file
diff --git a/Assignments/A2/A2Soln/src/CurveADTscipy.py b/Assignments/A2/A2Soln/src/CurveADTscipy.py
new file mode 100644
index 0000000000000000000000000000000000000000..2cb2e0a5f0b041efb18c0f5425224996a57e82a4
--- /dev/null
+++ b/Assignments/A2/A2Soln/src/CurveADTscipy.py
@@ -0,0 +1,68 @@
+## @file CurveT.py
+#  @author Steven Palmer and Henry Madej
+#  @brief CurveT
+#  @date 20/02/2018
+
+from Exceptions import *
+from SeqServices import *
+from scipy.interpolate import interp1d
+
+
+
+## @brief An abstract data type that represents a Curve
+class CurveT:
+
+  MAX_ORDER = 2
+
+  ## @brief 
+  #  @details 
+  def __init__(self, X, Y, i):
+    if not isAscending(X):
+      raise IndepVarNotAscending
+    if i < 1 or i > CurveT.MAX_ORDER:
+      raise InvalidInterpOrder
+      
+    self.__minx = X[0] 
+    self.__maxx = X[-1]
+    self.__o = i
+    
+    if self.__o == 1:
+      self.__f = interp1d(X, Y, 'linear')
+    elif self.__o == 2:
+      self.__f = interp1d(X, Y, 'quadratic')
+  
+  ## @brief 
+  #  @details 
+  def minD(self):
+    return self.__minx
+  
+  ## @brief 
+  #  @details 
+  def maxD(self):
+    return self.__maxx
+    
+  ## @brief 
+  #  @details 
+  def order(self):
+    return self.__o
+  
+  ## @brief 
+  #  @details 
+  def eval(self, x):
+    if x < self.__minx or x > self.__maxx:
+      raise OutOfDomain
+    return float(self.__f(x))
+
+  ## @brief 
+  #  @details 
+  def dfdx(self, x):
+    if x < self.__minx or x > self.__maxx:
+      raise OutOfDomain
+    return self.__f(x + DX) - self.__f(x) / DX
+
+  ## @brief 
+  #  @details 
+  def d2fdx2(self, x):
+    if x < self.__minx or x > self.__maxx:
+      raise OutOfDomain
+    return self.__f(x + 2*DX) - 2*self.__f(x + DX) + self.__f(x) / DX**2
\ No newline at end of file
diff --git a/Assignments/A2/A2Soln/src/CurveADTseq.py b/Assignments/A2/A2Soln/src/CurveADTseq.py
new file mode 100644
index 0000000000000000000000000000000000000000..854b07dd222870d2a4684fb012bbe32dcff99a0b
--- /dev/null
+++ b/Assignments/A2/A2Soln/src/CurveADTseq.py
@@ -0,0 +1,51 @@
+from Exceptions import *
+from SeqServices import *
+
+class CurveT:
+
+  MAX_ORDER = 2
+  DX = 1E-3
+
+  def __init__(self, X, Y, i):
+    if not isAscending(X):
+      raise IndepVarNotAscending
+    if i < 1 or i > CurveT.MAX_ORDER:
+      raise InvalidInterpOrder
+      
+    self.__minx = X[0] 
+    self.__maxx = X[-1]
+    self.__o = i
+    
+    self.X = X
+    self.Y = Y
+  
+  
+  def minD(self):
+    return self.__minx
+  
+  
+  def maxD(self):
+    return self.__maxx
+    
+  
+  def order(self):
+    return self.__o
+  
+  
+  def eval(self, x):
+    if x < self.__minx or x > self.__maxx:
+      raise OutOfDomain
+    if self.__o == 1:
+      return (lambda v: interpLin(self.X[index(self.X, v)], self.Y[index(self.X, v)], self.X[index(self.X, v) + 1], self.Y[index(self.X, v) + 1], v))(x)
+    elif self.__o == 2:
+      return (lambda v: interpQuad(self.X[index(self.X, v) - 1], self.Y[index(self.X, v) - 1], self.X[index(X, v)], self.Y[index(self.X, v)], self.X[index(self.X, v) + 1], self.Y[index(self.X, v) + 1], v))(x)
+
+  def dfdx(self, x):
+    if x < self.__minx or x > self.__maxx:
+      raise OutOfDomain
+    return self.__f(x + DX) - self.__f(x) / DX
+
+  def d2fdx2(self, x):
+    if x < self.__minx or x > self.__maxx:
+      raise OutOfDomain
+    return self.__f(x + 2*DX) - 2*self.__f(x + DX) + self.__f(x) / DX**2
diff --git a/Assignments/A2/A2Soln/src/Data.py b/Assignments/A2/A2Soln/src/Data.py
new file mode 100644
index 0000000000000000000000000000000000000000..9ae1620c0067117f57acc55644b3353201cdaad2
--- /dev/null
+++ b/Assignments/A2/A2Soln/src/Data.py
@@ -0,0 +1,74 @@
+## @file Data.py
+#  @author Steven Palmer and Henry Madej
+#  @brief Data
+#  @date 20/02/2018
+
+from CurveADT import *
+import SeqServices
+from Exceptions import *
+
+
+## @brief An abstract data type for storing data
+class Data:
+  
+  MAX_SIZE = 10
+  
+  S = []
+  Z = []
+  
+  ## @brief init initial data structure
+  @staticmethod
+  def init():
+    Data.S = []
+    Data.Z = []
+    
+  ## @brief add adds a pair to the data structure
+  #  @exception throws Full exception is structure is full
+  #  @exception throws IndepVarNotAscending if z is less than or equal the last
+  #             value in the structure 
+  #  @param s dependant variable value added to the structure
+  #  @param z independent variable value aded to the structure
+  @staticmethod  
+  def add(s, z):
+    if len(Data.S) == Data.MAX_SIZE:
+      raise Full
+      
+    if Data.Z:
+      if z <= Data.Z[-1]:
+        raise IndepVarNotAscending
+    
+    Data.S.append(s)
+    Data.Z.append(z)
+
+  ## @brief getC gets value of the dependant variable at index i
+  #  @param i index of dependant variable value
+  #  @return value of dependant variable at index i
+  @staticmethod
+  def getC(i):
+    if not (0 <= i < len(Data.S)):
+      raise InvalidIndex
+    
+    return Data.S[i]
+
+  ## @brief eval evaluates the a curve at a particular value of x
+  #  @details  Uses linear interplation to find the value of the curve at x
+  #  @param x the value to evaluate the curve at
+  #  @param z value adjacent to the x value
+  #  @return value of the curve at the specified value of x
+  @staticmethod
+  def eval(x, z):
+    if not isInBounds(Data.Z, z):
+      raise OutOfDomain 
+    
+    j = SeqServices.index(Data.Z, z)
+    return interpLin(Data.Z[j], Data.S[j].eval(x), Data.Z[j+1], Data.S[j+1].eval(x), z)
+    
+  ## @brief slice slices a curve returning a subset of the original curve
+  #  @param x the x to slice at
+  #  @param i the order of the curve that is being sliced
+  #  @return CurveT
+  @staticmethod
+  def slice(x, i):
+    Y = [s.eval(x) for s in Data.S]
+    
+    return CurveT(Data.Z, Y, i)
diff --git a/Assignments/A2/A2Soln/src/Exceptions.py b/Assignments/A2/A2Soln/src/Exceptions.py
new file mode 100644
index 0000000000000000000000000000000000000000..58ae06db04e48154acc93530e1592068680aaa5a
--- /dev/null
+++ b/Assignments/A2/A2Soln/src/Exceptions.py
@@ -0,0 +1,23 @@
+## @brief exception when independent variable is not ascending 
+class IndepVarNotAscending(Exception):
+  pass
+
+## @brief exception when the order of interplation is incorrect
+class InvalidInterpOrder(Exception):
+  pass
+
+## @brief exception when given value is not within bounds
+class OutOfDomain(Exception):
+  pass
+
+## @brief exception when data structure is full
+class Full(Exception):
+  pass
+  
+## @brief exception when two sequences are of different size
+class SeqSizeMismatch(Exception):
+  pass
+
+## @brief exception when given index is not in bounds
+class InvalidIndex(Exception):
+  pass
diff --git a/Assignments/A2/A2Soln/src/Load.py b/Assignments/A2/A2Soln/src/Load.py
new file mode 100644
index 0000000000000000000000000000000000000000..666f6b63811d7551580c5990b14d2bce8d0d5ede
--- /dev/null
+++ b/Assignments/A2/A2Soln/src/Load.py
@@ -0,0 +1,35 @@
+## @file Load.py
+#  @author Steven Palmer and Henry Madej
+#  @brief function for retrieving data from file
+#  @date 20/02/2018
+
+from Data import *
+from CurveADT import *
+
+## @brief Load reads in data from a file, storing it in Data 
+#  @param s the name of the file to be read
+def Load(s):
+  with open(s, 'r') as infile:
+    contents = infile.readlines()
+    
+  contents = [x.strip().split(',') for x in contents]
+  
+  zs = contents[0]
+  os = contents[1]
+  pts = contents[2:]
+  
+  Data.init()
+  
+  for i in range(len(zs)):
+    X = []
+    Y = []
+    for j in range(0, len(pts)):
+      if pts[j][i*2] == '':
+        break
+      X.append(float(pts[j][i*2]))
+      Y.append(float(pts[j][i*2+1]))
+      
+    Data.add(CurveT(X,Y,int(os[i])), float(zs[i]))
+  
+  
+   
diff --git a/Assignments/A2/A2Soln/src/Plot.py b/Assignments/A2/A2Soln/src/Plot.py
new file mode 100644
index 0000000000000000000000000000000000000000..d5bb1c604e0819172954349229c822a7d29ce5cf
--- /dev/null
+++ b/Assignments/A2/A2Soln/src/Plot.py
@@ -0,0 +1,39 @@
+## @file Plot.py
+#  @author Steven Palmer and Henry Madej
+#  @brief Plotting functions
+#  @date 20/02/2018
+
+from matplotlib.pyplot import *
+from Exceptions import *
+from CurveADT import *
+
+## @brief PlotSeq plots a sequence of (x, y) pairs
+#  @param X corresponding x values of the sequence
+#  @param Y corresponding y values of the sequence
+def PlotSeq(X, Y):
+  if len(X) != len(Y):
+    raise SeqSizeMismatch
+    
+  figure(dpi=100)
+  plot(X, Y)
+
+  show()
+  
+
+## @brief PlotCurve plots a curve
+#  @param c the curve to be plotted
+#  @param n number of equally spaced points
+def PlotCurve(c, n):
+  d = (c.maxD() - c.minD())/(n+1)
+  
+  curX = c.minD()
+  
+  X = []
+  Y = []
+    
+  for i in range(n):
+    curX = curX + d
+    X.append(curX)
+    Y.append(c.eval(curX))
+    
+  PlotSeq(X, Y)
diff --git a/Assignments/A2/A2Soln/src/SeqServices.py b/Assignments/A2/A2Soln/src/SeqServices.py
new file mode 100644
index 0000000000000000000000000000000000000000..17dac9b825955a0af71dbb86cd19a28815f3c074
--- /dev/null
+++ b/Assignments/A2/A2Soln/src/SeqServices.py
@@ -0,0 +1,57 @@
+## @file SeqServices.py
+#  @author Steven Palmer and Henry Madej
+#  @brief Provides the services for working with sequences
+#  @date 20/02/2018
+
+
+## @brief isAscending checks if a sequence is in ascending order
+#  @param X sequence to be checked for ascending order
+#  @return boolean False if not in ascending order True otherwise
+def isAscending(X):
+  for i in range(0, len(X) - 1):
+    if X[i + 1] < X[i]:
+      return False
+  
+  return True
+  
+## @brief isInBounds checks if value (x) is within bounds of sequence (X)
+#  @param X sequence to be checked against
+#  @param x value to be checked for in bounds 
+#  @return boolean False if not in bounds True otherwise
+def isInBounds(X, x):
+  return X[0] <= x and x <= X[len(X) - 1]
+
+## @brief interpLin given two points interpolates the y value for a given x
+#  @details linear interpolation
+#  @param x1 x value of the first point
+#  @param y1 y value of the first point
+#  @param x2 x value of the second point
+#  @param y2 y value of the second point
+#  @param x value for which we want to interpolate a y value
+#  @return y value for given x value
+def interpLin(x1, y1, x2, y2, x):
+  return (y2 - y1) / (x2 - x1) * (x - x1) + y1
+  
+## @brief interpQuad given three points interpolates the y value for given x
+#  @details quadratic interpolation
+#  @param x0 x value of the first point
+#  @param y0 y value of the first point
+#  @param x1 x value of the second point
+#  @param y1 y value of the second point
+#  @param x2 x value of the third point
+#  @param y2 y value of the third point
+#  @param x value for which we want to interpolate a y value
+#  @return y value for given x value
+def interpQuad(x0, y0, x1, y1, x2, y2, x):
+  return y1 + (y2 - y0) / (x2 - x0) * (x - x1) + (y2 - 2*y1 + y0) / (2*(x2 - x1)**2) * (x - x1)**2
+  
+## @brief index given a sequence and value, returns index of that value if in 
+#  sequence
+#  @details Seq[i] <= x <= Seq[i+1]
+#  @param X sequence to be searched
+#  @param x value to look for
+#  @return index of closest value to given x in sequence
+def index(X, x):
+  for i in range(0, len(X) - 1):
+    if X[i] <= x and x < X[i+1]:
+      return i
diff --git a/Assignments/A2/A2Soln/src/glass.csv b/Assignments/A2/A2Soln/src/glass.csv
new file mode 100644
index 0000000000000000000000000000000000000000..33dcc57541aedfd7aab6a3ff08f89ba21b8e804a
--- /dev/null
+++ b/Assignments/A2/A2Soln/src/glass.csv
@@ -0,0 +1,440 @@
+4.5,9.1,14,18,23,27,32,36,41,45
+1,1,1,1,1,1,1,1,1,1
+6.143397364,4.411877631,6.128184215,7.627031257,6.34463941,9.952136904,7.199850837,9.992650492,7.970252895,9.923747653,9.112111846,9.922695591,9.815736637,9.975357212,10.67908231,9.974691345,11.70510613,9.988805921,12.89348645,9.973203096
+6.15864828,4.388319476,6.15864828,7.575020192,6.34463941,10.00554409,7.217724387,9.92452703,8.009874141,9.806380586,9.157409434,9.86969188,9.864532042,9.869110571,10.73216953,9.894895413,11.73416392,9.920708668,12.95758178,9.866979399
+6.189263785,4.364878545,6.189263785,7.494339327,6.376179503,9.898975927,7.253604708,9.871513535,8.009874141,9.870738322,9.202932202,9.764570671,9.864532042,9.9220722,10.78552065,9.815737836,11.7924961,9.86771557,12.95758178,9.919929591
+6.189263785,4.341579876,6.189263785,7.534556975,6.407876387,9.793542816,7.271611701,9.833410793,8.04969235,9.765605967,9.202932202,9.816971296,9.924500406,9.816384527,10.83913698,9.763305457,11.85111825,9.76261541,13.02199574,9.814273304
+6.204628563,4.318397091,6.220031484,7.434385814,6.407876387,9.846098918,7.289663395,9.766372924,8.089708501,9.661593368,9.24868127,9.712411609,9.980983057,9.774400185,10.89301986,9.659317361,11.85111825,9.815005543,13.0867299,9.761848748
+6.235472643,4.318380134,6.250952134,7.37491192,6.43973084,9.689232664,7.307759903,9.728676011,8.089708501,9.713441376,9.294657763,9.608965579,9.987584432,9.726269624,10.89301986,9.711153155,11.92316345,9.71045832,13.15178588,9.657876167
+6.250952134,4.295321229,6.282026495,7.29636239,6.43973084,9.741228995,7.325901336,9.662352156,8.129923578,9.609984377,9.294657763,9.660531165,10.0123785,9.659962175,10.94717059,9.607720528,11.96923827,9.607041477,13.15178588,9.709704227
+6.250952134,4.27239384,6.282026495,7.335517614,6.471743646,9.611720356,7.36231942,9.610739112,8.150106023,9.572891103,9.340862812,9.557637708,10.04276596,9.604377714,11.00159051,9.556399307,11.96923827,9.658596737,13.21716525,9.606287032
+6.282026495,4.249572145,6.313255331,7.237992661,6.503915592,9.534828134,7.380596296,9.573642925,8.17033857,9.507629289,9.387297553,9.45584016,10.08713062,9.557056015,11.02890184,9.519512864,12.02873903,9.54436558,13.28286964,9.529438276
+6.313255331,4.226872357,6.34463941,7.18008988,6.53624747,9.433273529,7.398918544,9.508375986,8.21095447,9.456842723,9.387297553,9.506584013,10.11217181,9.506024091,11.05628096,9.45461495,12.08853558,9.504680412,13.34890065,9.453204298
+6.313255331,4.204310331,6.376179503,7.122650312,6.53624747,9.483896281,7.417286276,9.471674907,8.231338073,9.420340555,9.433963127,9.405330234,10.16244083,9.455246099,11.11124329,9.378979546,12.14862939,9.403446908,13.4152599,9.402708451
+6.34463941,4.181852316,6.407876387,7.065670252,6.568740074,9.332800573,7.435699607,9.40710312,8.251772278,9.356118734,9.480860682,9.355090114,10.18766898,9.418750094,11.16647884,9.303949213,12.14862939,9.453909597,13.48194905,9.302561041
+6.376179503,4.159514263,6.43973084,7.009146023,6.568740074,9.382884146,7.472663513,9.356853531,8.292792996,9.256467547,9.504396813,9.318980699,10.21295975,9.354539115,11.22198897,9.254250638,12.20902193,9.353216849,13.48194905,9.352482337
+6.392008297,4.137303656,6.471743646,6.934492233,6.601394203,9.282947883,7.491214317,9.320737309,8.292792996,9.306141486,9.527991372,9.255449883,10.26372981,9.304570305,11.27777505,9.155684438,12.2697147,9.253596569,13.54896971,9.252869881
+6.407876387,4.115211647,6.471743646,6.971705516,6.634210661,9.184076032,7.509811173,9.257194518,8.334017635,9.207022602,9.575356355,9.206010374,10.2892094,9.268655889,11.27777505,9.204817535,12.2697147,9.303255101,13.61632354,9.203444153
+6.43973084,4.093229567,6.503915592,6.879017407,6.634210661,9.233361489,7.528454195,9.221462966,8.375447207,9.108959424,9.622956796,9.107957978,10.34035851,9.205450082,11.33383846,9.106777843,12.33070917,9.20416696,13.68401219,9.154282442
+6.4557174,4.071372901,6.53624747,6.82398637,6.667190254,9.110604897,7.547143499,9.158596963,8.375447207,9.157841775,9.622956796,9.156834955,10.36602833,9.156295632,11.39018056,9.033925081,12.39200686,9.155001388,13.7179826,9.118948117
+6.471743646,4.049632944,6.568740074,6.769395574,6.700333792,9.037721518,7.565879198,9.123245985,8.417082731,9.036089209,9.670793865,9.059306322,10.41755932,9.058772743,11.44680275,8.961655129,12.45360926,9.057492284,13.75203734,9.056780995
+6.503915592,4.028001163,6.601394203,6.715241494,6.733642093,8.941461552,7.603490246,9.061031773,8.458925231,8.963801945,9.718868739,8.962816457,10.41755932,9.107385772,11.50370641,8.913784973,12.45360926,9.106098441,13.82040065,9.008402709
+6.52006149,4.006492798,6.634210661,6.661520639,6.733642093,8.989445041,7.622365826,9.012648476,8.500975736,8.868329289,9.718868739,9.010914546,10.46934647,9.010383818,11.53226423,8.879378937,12.5155179,9.009110198,13.8891038,8.960282844
+6.53624747,3.985099281,6.667190254,6.590569376,6.767115973,8.846226841,7.641288264,8.97786084,8.500975736,8.915920321,9.767182601,8.914940098,10.52139106,8.96225337,11.56089295,8.818845043,12.5777343,8.960986553,13.95814849,8.864847669
+6.568740074,3.963812218,6.667190254,6.62593703,6.767115973,8.893699263,7.660257677,8.91665556,8.54323528,8.820957648,9.815736637,8.867319478,10.54751029,8.927660252,11.61836377,8.771737731,12.64025998,8.865543884,13.95814849,8.912420018
+6.568740074,3.942654344,6.700333792,6.537845878,6.800756257,8.775458445,7.679274181,8.882238444,8.585704902,8.727006414,9.840104093,8.833092793,10.57369437,8.866797208,11.67612029,8.678310734,12.64025998,8.913119969,14.0275364,8.817494627
+6.601394203,3.921594007,6.733642093,6.485544159,6.834563771,8.705256184,7.717448931,8.821667736,8.585704902,8.773839051,9.864532042,8.772874449,10.62625769,8.819433751,11.67612029,8.724882051,12.70309649,8.818187122,14.09726926,8.770394528
+6.634210661,3.900646167,6.767115973,6.433660846,6.868539347,8.612537276,7.736607412,8.774562573,8.628385647,8.680389673,9.913570016,8.70269286,10.65263725,8.785391898,11.73416392,8.631954109,12.76624537,8.724265397,14.16734876,8.676981837
+6.667190254,3.879810224,6.800756257,6.382192591,6.868539347,8.658755626,7.755813453,8.740693917,8.671278563,8.587935616,9.962851764,8.633072712,10.67908231,8.725498748,11.7924961,8.585845106,12.76624537,8.771083324,14.16734876,8.723546022
+6.667190254,3.859100732,6.834563771,6.314216426,6.902683821,8.543638359,7.794368691,8.681088445,8.671278563,8.634021943,10.0123785,8.586957733,10.73216953,8.678890061,11.85111825,8.494398034,12.82970816,8.677663297,14.23777664,8.630632311
+6.700333792,3.838486711,6.834563771,6.348101059,6.936998031,8.475290622,7.813718124,8.634733935,8.714384707,8.542061745,10.06215144,8.495498812,10.78552065,8.586451976,11.85111825,8.539982401,12.89348645,8.631310131,14.30855463,8.584530368
+6.716967296,3.817990298,6.868539347,6.280488,6.971482822,8.385021057,7.833115592,8.601405,8.757705137,8.451081006,10.06215144,8.541089086,10.78552065,8.632530341,11.91003183,8.449023809,12.95758178,8.585204567,14.37968446,8.538674686
+6.750358284,3.797595875,6.902683821,6.213595082,6.971482822,8.430018462,7.852561214,8.542766154,8.757705137,8.496432916,10.11217181,8.450118707,10.83913698,8.540586029,11.96923827,8.35903401,12.98974883,8.552066808,14.41538187,8.505716526
+6.767115973,3.777317808,6.902683821,6.24693974,7.006139042,8.295712944,7.891597398,8.497133562,8.801240919,8.405938166,10.16244083,8.404981007,10.89301986,8.494965084,11.96923827,8.403891958,13.02199574,8.493764318,14.45116789,8.447730023
+6.800756257,3.757140643,6.936998031,6.163887317,7.006139042,8.340231087,7.911188201,8.464335746,8.844993123,8.316407268,10.18766898,8.372538887,10.92006166,8.462175637,12.02873903,8.314382854,13.0867299,8.448393478,14.52300668,8.402605083
+6.834563771,3.737071258,6.971482822,6.114577207,7.040967543,8.251400028,7.930827637,8.40663135,8.844993123,8.361036464,10.21295975,8.315460303,10.94717059,8.404485967,12.08853558,8.225827103,13.15178588,8.403264994,14.59520258,8.357721185
+6.851530499,3.717116375,7.006139042,6.04945139,7.075969182,8.185390151,7.950515828,8.37418286,8.888962826,8.249877343,10.26372981,8.271041903,11.00159051,8.359592022,12.08853558,8.269970209,13.18443504,8.370829498,14.66775738,8.313077042
+6.868539347,3.697268045,7.006139042,6.081915187,7.111144818,8.119908343,7.970252895,8.317093068,8.933151108,8.183879647,10.31475225,8.226860772,11.05628096,8.270554753,12.14862939,8.181887494,13.21716525,8.313762567,14.70416993,8.280989659
+6.902683821,3.677518479,7.040967543,6.01713725,7.146495317,8.033423922,8.009874141,8.272665947,8.977559057,8.140164107,10.34035851,8.195106173,11.05628096,8.314937886,12.20902193,8.116433705,13.28286964,8.269353237,14.74067287,8.224535199
+6.919819656,3.657881591,7.075969182,5.984995721,7.146495317,8.076534516,8.029758564,8.240734546,9.022187763,8.053463944,10.36602833,8.139237211,11.11124329,8.226376223,12.2697147,8.073078439,13.34890065,8.203199737,14.81395082,8.18060249
+6.954219051,3.638342414,7.093535196,5.953037569,7.182021549,7.969157819,8.04969235,8.184554519,9.022187763,8.096682081,10.41755932,8.095760136,11.16647884,8.138757823,12.33070917,8.008495106,13.4152599,8.137575454,14.88759305,8.136904456
+6.971482822,3.618914714,7.111144818,5.921250065,7.217724387,7.905405834,8.089708501,8.140835374,9.067038325,8.010445041,10.46934647,8.009532916,11.16647884,8.182433681,12.39200686,7.965716411,13.48194905,8.094107255,14.96160136,8.071810525
+7.006139042,3.599583686,7.146495317,5.889620733,7.253604708,7.842163855,8.109791112,8.109412821,9.112111846,7.925126505,10.46934647,8.052515301,11.22198897,8.095283309,12.45360926,7.880874276,13.54896971,8.05087125,15.03597759,8.007237335
+7.023531704,3.580362947,7.164236412,5.858171856,7.289663395,7.758637666,8.129923578,8.054128062,9.112111846,7.967655931,10.52139106,7.966748678,11.27777505,8.052041021,12.45360926,7.923166226,13.58260487,8.019795947,15.11072354,7.964465359
+7.040967543,3.561244841,7.182021549,5.826890907,7.289663395,7.800273646,8.17033857,8.011105611,9.1801426,7.861711328,10.57369437,7.881895547,11.305772,8.020961203,12.5155179,7.838777289,13.65012591,7.965106499,15.18584107,7.921921857
+7.075969182,3.542221865,7.217724387,5.795765611,7.325901336,7.696569809,8.190621344,7.980183798,9.225778378,7.777976941,10.57369437,7.924192979,11.33383846,7.966279449,12.5777343,7.75528717,13.68401219,7.922575126,15.26133202,7.879605607
+7.111144818,3.523300504,7.235642307,5.764817893,7.36231942,7.655457315,8.21095447,7.925780039,9.225778378,7.819716704,10.62625769,7.839793105,11.39018056,7.923726257,12.5777343,7.79690517,13.75203734,7.880255388,15.2992181,7.849191368
+7.128798156,3.504487095,7.253604708,5.734035428,7.398918544,7.573919721,8.231338073,7.895187572,9.271641018,7.736429598,10.67908231,7.79791556,11.44680275,7.839331354,12.64025998,7.713861028,13.82040065,7.838161707,15.33719824,7.79568063
+7.146495317,3.485774145,7.289663395,5.672962727,7.398918544,7.61456443,8.27225721,7.841347867,9.294657763,7.695119294,10.73216953,7.714860656,11.44680275,7.881400369,12.70309649,7.672656169,13.85470964,7.807907435,15.41344161,7.754038719
+7.182021549,3.467154308,7.289663395,5.703406134,7.435699607,7.493250577,8.292792996,7.79947733,9.317731647,7.654029575,10.73216953,7.756261711,11.50370641,7.797456276,12.76624537,7.631671414,13.8891038,7.754678145,15.49006399,7.712619245
+7.217724387,3.448633933,7.325901336,5.642659663,7.435699607,7.533462382,8.334017635,7.716405791,9.3640514,7.613144317,10.78552065,7.673650458,11.56089295,7.75580488,12.79793743,7.602214167,13.95814849,7.713255255,15.56706727,7.67142102
+7.235642307,3.430219222,7.36231942,5.582560198,7.472663513,7.433305774,8.334017635,7.757815138,9.387297553,7.572492321,10.83913698,7.632660392,11.58959274,7.725868494,12.82970816,7.550387161,14.0275364,7.672053633,15.64445335,7.610050882
+7.253604708,3.41190284,7.36231942,5.612518468,7.509811173,7.373840519,8.375447207,7.67518734,9.410601414,7.532057395,10.86604502,7.603199328,11.61836377,7.673198493,12.89348645,7.510055526,14.09726926,7.631072096,15.72222413,7.549171695
+7.289663395,3.3936776,7.398918544,5.552740034,7.547143499,7.295302401,8.396239161,7.645562128,9.457382835,7.491823671,10.89301986,7.551365606,11.67612029,7.63221084,12.95758178,7.469939328,14.13226557,7.601617162,15.80038151,7.508846552
+7.325901336,3.375549712,7.435699607,5.493598294,7.547143499,7.334451937,8.437978045,7.593424695,9.504396813,7.412028924,10.94717059,7.511028744,11.73416392,7.59144213,13.02199574,7.39037767,14.16734876,7.549794227,15.87892742,7.468736813
+7.344087804,3.35752525,7.435699607,5.523079159,7.584661409,7.256333343,8.458925231,7.552877996,9.504396813,7.451804862,11.00159051,7.431029446,11.76329385,7.562140163,13.02199574,7.430037418,14.23777664,7.509465758,15.9578638,7.428841326
+7.36231942,3.339597033,7.472663513,5.464253335,7.622365826,7.179046783,8.479924418,7.523724882,9.551644504,7.372436352,11.00159051,7.470907347,11.7924961,7.510586356,13.0867299,7.350900752,14.30855463,7.469352711,16.03719258,7.389158947
+7.398918544,3.321758026,7.491214317,5.435075797,7.622365826,7.217572444,8.522079313,7.472418295,9.59912707,7.33305527,11.05628096,7.391335379,11.85111825,7.470467323,13.15178588,7.302943814,14.37968446,7.409599087,16.07700474,7.360637767
+7.435699607,3.304014309,7.509811173,5.406054059,7.660257677,7.140698723,8.54323528,7.432517735,9.622956796,7.293898869,11.11124329,7.332205881,11.88053852,7.441632303,13.21716525,7.2531428,14.45116789,7.350323483,16.11691572,7.310457674
+7.454158648,3.286371825,7.547143499,5.377176732,7.698337893,7.083574278,8.585704902,7.392815718,9.646845679,7.254951552,11.16647884,7.27354941,11.91003183,7.390900041,13.28286964,7.195118821,14.52300668,7.31106052,16.19703517,7.271407661
+7.472663513,3.268823547,7.565879198,5.348464158,7.736607412,7.026906819,8.607018819,7.364280423,9.694801503,7.216198034,11.22198897,7.234696548,11.96923827,7.351420332,13.34890065,7.15668491,14.59520258,7.272007287,16.27755291,7.23256624
+7.509811173,3.251362588,7.584661409,5.319904902,7.775067173,6.952063861,8.628385647,7.314075497,9.718868739,7.177665617,11.27777505,7.15764044,12.02873903,7.312151511,13.4152599,7.118456299,14.66775738,7.233162663,16.35847091,7.193932298
+7.547143499,3.2339949,7.622365826,5.291487754,7.775067173,6.98937144,8.671278563,7.275006159,9.742995723,7.139338951,11.27777505,7.196051226,12.05860024,7.283927569,13.48194905,7.042638255,14.70416993,7.205243608,16.43979116,7.136381993
+7.584661409,3.216719984,7.660257677,5.23512859,7.813718124,6.896448465,8.692804915,7.246925593,9.791429522,7.101202998,11.33383846,7.119406726,12.08853558,7.234270437,13.48194905,7.080431894,14.74067287,7.156122892,16.52151567,7.079292081
+7.584661409,3.199549908,7.660257677,5.263222402,7.852561214,6.85960995,8.714384707,7.197520716,9.815736637,7.063284621,11.39018056,7.081377243,12.14862939,7.195627391,13.54896971,7.005018844,14.81395082,7.117897284,16.60364645,7.041476877
+7.622365826,3.182458986,7.698337893,5.207164289,7.891597398,6.804734171,8.757705137,7.159073975,9.840104093,7.025568717,11.41845656,7.054044059,12.20902193,7.157190763,13.61632354,6.967600383,14.88759305,7.079875865,16.68618551,7.00386367
+7.660257677,3.165459357,7.736607412,5.151703246,7.930827637,6.750297388,8.779446042,7.131440892,9.889020632,6.988040486,11.44680275,7.005954125,12.23933069,7.129564949,13.68401219,6.893389092,14.96160136,7.023237993,16.76913488,6.966451379
+7.698337893,3.148550535,7.736607412,5.179349364,7.970252895,6.696296092,8.801240919,7.082823316,9.913570016,6.950726364,11.50370641,6.968530668,12.2697147,7.080960162,13.68401219,6.930381799,15.03597759,6.967053215,16.8524966,6.910720885
+7.736607412,3.123362636,7.775067173,5.124184575,8.009874141,6.642726797,8.844993123,7.04498925,9.962851764,6.913597915,11.56089295,6.894309469,12.33070917,7.043136048,13.75203734,6.85656692,15.11072354,6.929837554,16.93627273,6.855436226
+7.775067173,3.098376235,7.813718124,5.069607342,8.04969235,6.589586047,8.86695072,7.017796519,9.987584432,6.876681295,11.56089295,6.931307115,12.39200686,6.968120233,13.82040065,6.819941439,15.18584107,6.892820686,17.02046532,6.818816786
+7.813718124,3.081825749,7.813718124,5.0968129,8.089708501,6.554386689,8.888962826,6.969953697,10.03723412,6.839948371,11.61836377,6.85748238,12.39200686,7.005513977,13.8891038,6.7835116,15.26133202,6.85600155,17.10507644,6.782392954
+7.852561214,3.065363669,7.852561214,5.0425272,8.129923578,6.4845765,8.933151108,6.932722542,10.06215144,6.803425018,11.67612029,6.820852009,12.45360926,6.930898872,13.95814849,6.711261022,15.33719824,6.819379089,17.19010818,6.746163685
+7.852561214,3.049001497,7.891597398,5.015591711,8.129923578,6.519375354,8.955327556,6.905963146,10.08713062,6.76709669,11.73416392,6.766286287,12.5155179,6.893876335,13.95814849,6.747276356,15.41344161,6.74674649,17.27556262,6.710127942
+7.891597398,3.032714754,7.911188201,4.988809897,8.17033857,6.449938068,8.977559057,6.858882732,10.13727516,6.730949129,11.76329385,6.730156269,12.5777343,6.820450272,14.0275364,6.675411717,15.41344161,6.782952254,17.36144187,6.674284689
+7.930827637,3.016515009,7.930827637,4.96217109,8.21095447,6.398339597,9.022187763,6.822244881,10.18766898,6.65925839,11.82177084,6.694206032,12.5777343,6.85705156,14.09726926,6.639753907,15.49006399,6.710707634,17.44774803,6.603197478
+7.970252895,3.000401798,7.970252895,4.935664837,8.251772278,6.347153906,9.044585244,6.795911914,10.18766898,6.694994657,11.85111825,6.658460901,12.64025998,6.784017715,14.16734876,6.604286569,15.56706727,6.674861284,17.44774803,6.638632899
+8.009874141,2.976399065,8.009874141,4.88309551,8.292792996,6.313249539,9.067038325,6.749581759,10.23831331,6.623686865,11.91003183,6.622893637,12.70309649,6.747779768,14.23777664,6.533944901,15.64445335,6.639206414,17.53448324,6.567925412
+8.04969235,2.952588349,8.009874141,4.909300171,8.313379762,6.279538607,9.112111846,6.713527757,10.2892094,6.588305352,11.93959835,6.587529294,12.76624537,6.711735392,14.23777664,6.569008685,15.72222413,6.603742001,17.62164962,6.532841757
+8.089708501,2.936816613,8.04969235,4.857011652,8.334017635,6.246007681,9.134732562,6.687614424,10.34035851,6.518133898,11.99895177,6.552340922,12.79793743,6.685828977,14.30855463,6.499042759,15.80038151,6.550913124,17.70924931,6.497945508
+8.129923578,2.921129123,8.089708501,4.831067125,8.375447207,6.212643603,9.1801426,6.64200953,10.34035851,6.553112834,12.05860024,6.482552523,12.86155777,6.640236259,14.37968446,6.464327052,15.87892742,6.498506869,17.79728448,6.463235663
+8.17033857,2.897760559,8.129923578,4.77961186,8.396239161,6.179469877,9.202932202,6.606543114,10.39176188,6.483316213,12.05860024,6.517340515,12.89348645,6.604779312,14.45116789,6.429796786,15.9578638,6.463794025,17.88575728,6.428711226
+8.21095447,2.874578939,8.129923578,4.805261185,8.417082731,6.14647329,9.24868127,6.571253177,10.44342079,6.448684513,12.11854524,6.447924901,12.95758178,6.569498796,14.52300668,6.361313593,16.03719258,6.429266606,17.93015847,6.403897247
+8.251772278,2.859223902,8.17033857,4.754080776,8.458925231,6.113640891,9.271641018,6.545889005,10.46934647,6.414250397,12.17878823,6.413482249,12.98974883,6.544141396,14.52300668,6.395450968,16.11691572,6.39492362,18.0192918,6.360227108
+8.292792996,2.843950887,8.190621344,4.728695355,8.500975736,6.048525046,9.294657763,6.501263345,10.4953365,6.380000149,12.20902193,6.379236103,13.02199574,6.49952765,14.59520258,6.327333589,16.19703517,6.360764083,18.10886823,6.326252908
+8.334017635,2.821199736,8.231338073,4.703436251,8.500975736,6.080983872,9.340862812,6.466535777,10.54751029,6.345920328,12.2697147,6.345160364,13.0867299,6.464809353,14.66775738,6.293535096,16.27755291,6.293016151,18.1538233,6.292472541
+8.375447207,2.798630591,8.251772278,4.678321257,8.54323528,6.016215855,9.3640514,6.4415758,10.57369437,6.312034943,12.30017412,6.311279037,13.15178588,6.43027651,14.74067287,6.259917142,16.27755291,6.326787015,18.2440685,6.258860264
+8.417082731,2.783681245,8.292792996,4.653331234,8.585704902,5.952137675,9.387297553,6.39766128,10.59994345,6.278330496,12.36132002,6.277566301,13.21716525,6.378835329,14.81395082,6.226478765,16.35847091,6.25940097,18.33476233,6.225427532
+8.458925231,2.761412241,8.313379762,4.628483787,8.585704902,5.984079247,9.433963127,6.36348712,10.65263725,6.24479376,12.42276987,6.244033647,13.28286964,6.327805669,14.85072629,6.202445377,16.43979116,6.22596535,18.42590701,6.192173386
+8.500975736,2.739321386,8.334017635,4.603769018,8.628385647,5.920343353,9.457382835,6.338924897,10.70559301,6.178281018,12.45360926,6.210692308,13.34890065,6.294004654,14.88759305,6.160161094,16.52151567,6.192708331,18.56347428,6.109837081
+8.54323528,2.72468885,8.375447207,4.579177228,8.671278563,5.888718864,9.504396813,6.295697825,10.70559301,6.211436167,12.48452521,6.177529001,13.4152599,6.260384192,14.96160136,6.12725558,16.60364645,6.15962896,18.56347428,6.142624932
+8.585704902,2.702891776,8.417082731,4.530404819,8.692804915,5.857274803,9.527991372,6.262080613,10.75881202,6.145278714,12.54658754,6.144530714,13.48194905,6.193705398,15.07330423,6.078226584,16.68618551,6.094023301,18.65575591,6.077200381
+8.628385647,2.688453835,8.417082731,4.554716799,8.714384707,5.825998644,9.575356355,6.228630679,10.81229558,6.112452696,12.60895838,6.111708692,13.48194905,6.22694332,15.11072354,6.045770606,16.68618551,6.126726289,18.7484963,6.044738015
+8.671278563,2.666946635,8.458925231,4.506204917,8.757705137,5.794878114,9.59912707,6.204588985,10.86604502,6.047349507,12.67163929,6.046613427,13.54896971,6.160620701,15.18584107,6.013476128,16.76913488,6.061471073,18.8416977,6.012449052
+8.714384707,2.652700701,8.500975736,4.482134281,8.801240919,5.733157383,9.646845679,6.16227799,10.86604502,6.079802024,12.67163929,6.079061994,13.61632354,6.127712732,15.22353975,5.981365899,16.8524966,6.029092728,18.93536243,5.980332566
+8.757705137,2.638530864,8.522079313,4.458200976,8.801240919,5.763923819,9.670793865,6.129373202,10.92006166,6.015046594,12.73463179,6.014314446,13.68401219,6.094980546,15.2992181,5.949415449,16.93627273,5.996887337,19.02949277,5.948387635
+8.801240919,2.61742304,8.54323528,4.434395469,8.844993123,5.702532779,9.694801503,6.105714629,10.97434682,5.982916233,12.79793743,5.982187996,13.7179826,6.071454724,15.37527267,5.917635667,17.02046532,5.964853976,19.12409105,5.916613344
+8.844993123,2.596484075,8.585704902,4.410708415,8.86695072,5.672082898,9.742995723,6.064077888,11.00159051,5.950969185,12.86155777,5.950233154,13.75203734,6.030063451,15.45170531,5.886025642,17.10507644,5.932991727,19.1715664,5.885020334
+8.888962826,2.582614528,8.628385647,4.363730353,8.888962826,5.641795611,9.767182601,6.031697461,11.05628096,5.919181104,12.92549438,5.918449004,13.82040065,5.997852875,15.5285179,5.823334107,17.19010818,5.885528744,19.26687094,5.85358453
+8.933151108,2.561954026,8.628385647,4.38714789,8.933151108,5.611659031,9.815736637,5.999478156,11.08372806,5.887574383,12.98974883,5.855412131,13.8891038,5.965814357,15.5285179,5.854584467,17.23278243,5.854101718,19.31470074,5.822328076
+8.977559057,2.548268927,8.671278563,4.340420769,8.977559057,5.581683431,9.840104093,5.97632096,11.13882682,5.856124936,12.98974883,5.886834635,13.95814849,5.933946977,15.60571235,5.79222781,17.31844901,5.82283107,19.41071683,5.791227152
+9.022187763,2.527883184,8.714384707,4.294191334,8.999845747,5.551878851,9.864532042,5.935578249,11.1941995,5.824843481,13.05432269,5.824134484,14.0275364,5.870745037,15.68329053,5.761287672,17.40454145,5.791727459,19.50721023,5.760292359
+9.067038325,2.51438008,8.714384707,4.317235697,9.022187763,5.522233418,9.913570016,5.903872381,11.22198897,5.793740496,13.11921757,5.793023911,14.0275364,5.902249823,15.76125437,5.730512806,17.49106187,5.760789994,19.60418331,5.72952281
+9.112111846,2.500949105,8.757705137,4.271253205,9.067038325,5.492735499,9.962851764,5.872335875,11.24984743,5.762803592,13.18443504,5.762079521,14.09726926,5.839385486,15.83960578,5.699902328,17.5780124,5.730017786,19.70163845,5.698917621
+9.157409434,2.480941913,8.801240919,4.248437603,9.089547147,5.463405875,9.987584432,5.849669432,11.305772,5.732020628,13.21716525,5.731311677,14.16734876,5.808193448,15.87892742,5.669466493,17.62164962,5.699421143,19.79957807,5.668475914
+9.202932202,2.467689554,8.823089901,4.225752171,9.134732562,5.434222194,10.0123785,5.809790148,11.33383846,5.70141329,13.28286964,5.700696932,14.23777664,5.777168026,15.91834668,5.639193176,17.70924931,5.668976747,19.8487303,5.638207887
+9.24868127,2.447948433,8.86695072,4.20317962,9.157409434,5.405205014,10.06215144,5.778756198,11.36197458,5.670969387,13.31584421,5.670256854,14.30855463,5.746308333,15.99747902,5.609070498,17.75321233,5.638706046,19.94740112,5.608090472
+9.294657763,2.434872314,8.888962826,4.180735852,9.202932202,5.376332222,10.11217181,5.747888021,11.41845656,5.640676971,13.38203914,5.639968244,14.34407545,5.724128339,16.07700474,5.579108725,17.84146604,5.608585969,19.99692032,5.578144885
+9.340862812,2.421866043,8.933151108,4.158403764,9.225778378,5.347624158,10.13727516,5.72570193,11.47521931,5.610546366,13.44856314,5.609841426,14.37968446,5.685104915,16.15692578,5.549306998,17.93015847,5.578626784,20.09632782,5.548348307
+9.340862812,2.408938706,8.977559057,4.114112976,9.24868127,5.319069386,10.16244083,5.686667778,11.50370641,5.580587666,13.51541783,5.550091504,14.45116789,5.654736991,16.23724413,5.519664461,18.0192918,5.548827631,20.19622949,5.518710891
+9.387297553,2.396070963,8.977559057,4.136190966,9.294657763,5.290656702,10.21295975,5.656291506,11.53226423,5.550788937,13.51541783,5.579875534,14.52300668,5.624531283,16.31796175,5.490180265,18.10886823,5.519187655,20.29662778,5.489231789
+9.433963127,2.383271956,9.022187763,4.092136764,9.317731647,5.26240612,10.23831331,5.634458966,11.58959274,5.521138484,13.58260487,5.520444777,14.59520258,5.594486923,16.35847091,5.460864285,18.19888996,5.460403279,20.39752517,5.459910154
+9.480860682,2.370541316,9.067038325,4.070277942,9.340862812,5.234306389,10.26372981,5.596046849,11.64720623,5.491646414,13.65012591,5.490956413,14.66775738,5.564603051,16.39908063,5.431704844,18.19888996,5.489706006,20.4481618,5.430755807
+9.527991372,2.35787868,9.089547147,4.048543832,9.387297553,5.20634648,10.31475225,5.566154644,11.70510613,5.462311881,13.7179826,5.461625566,14.70416993,5.543124416,16.48060276,5.402690499,18.2893592,5.431235637,20.54981248,5.401746532
+9.575356355,2.345283683,9.112111846,4.026925775,9.433963127,5.150894147,10.34035851,5.54467002,11.73416392,5.433144711,13.75203734,5.43246206,14.74067287,5.505334959,16.56253015,5.373831138,18.38027817,5.402223798,20.60082716,5.372902762
+9.622956796,2.326521789,9.157409434,4.005415288,9.433963127,5.178535923,10.39176188,5.506859215,11.76329385,5.404133284,13.82040065,5.40344367,14.81395082,5.475927307,16.64486482,5.345125935,18.47164911,5.37336693,20.70323676,5.344202518
+9.670793865,2.31409429,9.202932202,3.984019703,9.480860682,5.123379798,10.41755932,5.477454174,11.82177084,5.375266217,13.85470964,5.374590838,14.88759305,5.44667674,16.68618551,5.316584503,18.56347428,5.344664207,20.80615546,5.315655581
+9.718868739,2.295581907,9.225778378,3.962746186,9.504396813,5.096022427,10.46934647,5.448195451,11.88053852,5.346553348,13.92358335,5.345881577,14.96160136,5.388664671,16.76913488,5.288185092,18.65575591,5.316114803,20.90958578,5.287261132
+9.767182601,2.283319679,9.271641018,3.941578525,9.527991372,5.068811136,10.52139106,5.390167207,11.91003183,5.318004294,13.99279943,5.31732567,14.96160136,5.41758242,16.8524966,5.259937381,18.70206862,5.287728283,21.01353027,5.259018356
+9.815736637,2.265053487,9.294657763,3.920531632,9.575356355,5.041735248,10.52139106,5.419093019,11.93959835,5.289607684,14.0275364,5.288932684,15.03597759,5.359880232,16.89433274,5.231850832,18.79503923,5.259483012,21.11799148,5.230926444
+9.864532042,2.252954331,9.340862812,3.899589468,9.622956796,4.988036175,10.57369437,5.361374742,11.99895177,5.261352374,14.09726926,5.26068098,15.11072354,5.33124955,16.97831684,5.20390404,18.8416977,5.231398889,21.17041666,5.202994805
+9.913570016,2.234931058,9.387297553,3.858055288,9.622956796,5.014803989,10.62625769,5.332736076,12.05860024,5.233247995,14.16734876,5.232580187,15.18584107,5.302771803,17.06271843,5.17610653,18.93536243,5.203454511,21.27565777,5.175202152
+9.962851764,2.222992806,9.387297553,3.878759169,9.670793865,4.961391759,10.65263725,5.312152417,12.11854524,5.177509137,14.20251905,5.204639717,15.26133202,5.274446175,17.1475396,5.148457505,19.02949277,5.175659402,21.38142205,5.147557958
+10.0123785,2.211118324,9.433963127,3.83744685,9.718868739,4.934889668,10.67908231,5.275937579,12.11854524,5.20529374,14.27312176,5.176838277,15.2992181,5.254087507,17.20432117,5.116396965,19.12409105,5.148012766,21.43450119,5.120071483
+10.06215144,2.199307272,9.480860682,3.816948496,9.742995723,4.90853878,10.73216953,5.247755291,12.17878823,5.14985262,14.34407545,5.121700234,15.37527267,5.218258273,17.23278243,5.093621743,19.2191596,5.120513808,21.54105511,5.092721778
+10.11217181,2.181713166,9.504396813,3.796567092,9.767182601,4.882328598,10.78552065,5.219723542,12.23933069,5.122343834,14.34407545,5.149185344,15.45170531,5.176513044,17.31844901,5.066413324,19.26687094,5.093171741,21.64813872,5.065518167
+10.16244083,2.170059186,9.551644504,3.776287104,9.815736637,4.856248836,10.81229558,5.199576097,12.30017412,5.067786207,14.41538187,5.094341829,15.5285179,5.148861847,17.40454145,5.039350244,19.36264927,5.065965726,21.75575466,5.038459868
+10.21295975,2.152699061,9.59912707,3.756115445,9.864532042,4.804525362,10.86604502,5.164118593,12.30017412,5.094981992,14.48704275,5.067129564,15.60571235,5.121358354,17.49106187,5.012431725,19.41071683,5.038914929,21.86390557,5.011546105
+10.26372981,2.141200064,9.622956796,3.736058871,9.864532042,4.830308384,10.92006166,5.122806472,12.36132002,5.040715793,14.55905988,5.040062658,15.68329053,5.094001776,17.5780124,4.985656996,19.50721023,5.011998736,21.97259411,4.984776107
+10.31475225,2.129762492,9.670793865,3.716102098,9.913570016,4.7788612,10.97434682,5.095442158,12.42276987,5.01378998,14.63143501,5.013140334,15.72222413,5.066801275,17.66539517,4.959025289,19.60418331,4.98522632,22.08182296,4.958149105
+10.36602833,2.112724733,9.718868739,3.696251927,9.938180343,4.753343458,11.01068676,5.063711756,12.48452521,4.987007995,14.66775738,4.98637161,15.83960578,5.012825384,17.70924931,4.932545523,19.70163845,4.958596913,22.1915948,4.931664336
+10.41755932,2.101439266,9.742995723,3.676515007,9.962851764,4.727961975,11.02890184,5.041171058,12.54658754,4.960369071,14.74067287,4.959736085,15.83960578,5.039726227,17.79728448,4.90619752,19.75054755,4.932119435,22.24668519,4.90533067
+10.46934647,2.090214083,9.767182601,3.656883477,10.0123785,4.702706788,11.08372806,5.014242813,12.5777343,4.933882131,14.77726642,4.933252524,15.91834668,4.986048552,17.84146604,4.879999839,19.89800455,4.905764076,22.35727659,4.879128039
+10.52139106,2.073492705,9.815736637,3.637349632,10.03723412,4.677595689,11.13882682,4.98745841,12.60895838,4.907536622,14.85072629,4.906900744,15.99747902,4.959414754,17.93015847,4.853932517,19.94740112,4.87956871,22.41277828,4.853074902
+10.57369437,2.062416803,9.864532042,3.617920131,10.06215144,4.652618677,11.1941995,4.947559542,12.67163929,4.881322208,14.92455133,4.880689726,16.07700474,4.932923223,18.0192918,4.828004438,19.99692032,4.853513219,22.52419534,4.827151403
+10.62625769,2.045917799,9.913570016,3.598594415,10.11217181,4.627765948,11.24984743,4.907979859,12.73463179,4.855247822,14.96160136,4.85462825,16.15692578,4.906573202,18.10886823,4.802214858,20.09632782,4.82758738,22.63616628,4.80136638
+10.67908231,2.034989192,9.938180343,3.579378958,10.16244083,4.603045975,11.305772,4.881763077,12.79793743,4.829312717,14.99874337,4.828705935,16.21042708,4.876018927,18.1538233,4.776572415,20.19622949,4.801800027,22.74869384,4.775719091
+10.73216953,2.024118963,9.962851764,3.560266106,10.18766898,4.578467036,11.36197458,4.855686336,12.86155777,4.777876137,15.07330423,4.802912607,16.23724413,4.854313728,18.2440685,4.751057567,20.29662778,4.776150422,22.86178079,4.750208802
+10.78552065,2.013306798,10.0123785,3.541248359,10.21295975,4.554019342,11.3995981,4.825448945,12.86155777,4.803516148,15.14823574,4.777257059,16.31796175,4.828383613,18.2893592,4.725688289,20.34701393,4.750647156,22.97542992,4.72483478
+10.83913698,1.997200667,10.06215144,3.522332198,10.26372981,4.529693299,11.41845656,4.803968854,12.92549438,4.752354326,15.22353975,4.751738554,16.39908063,4.802592007,18.38027817,4.700445248,20.4481618,4.725270792,23.089644,4.699596297
+10.89301986,1.986532291,10.08713062,3.50352396,10.31475225,4.505497196,11.47521931,4.778307663,12.98974883,4.726968843,15.26133202,4.72636564,16.48060276,4.776938171,18.47164911,4.675337046,20.49892413,4.700039209,23.20442587,4.67449263
+10.94717059,1.970640351,10.11217181,3.484816152,10.34035851,4.48143914,11.53226423,4.752783547,13.05432269,4.701718961,15.33719824,4.70111898,16.56253015,4.75142137,18.56347428,4.650362963,20.60082716,4.674933176,23.31977833,4.649523058
+11.00159051,1.960113851,10.16244083,3.466201433,10.36602833,4.457509547,11.58959274,4.71476204,13.0867299,4.676613137,15.37527267,4.67601636,16.64486482,4.726040871,18.65575591,4.625522284,20.70323676,4.649961251,23.43570422,4.624686866
+11.05628096,1.944433255,10.21295975,3.447686147,10.41755932,4.41003301,11.64720623,4.6770447,13.15178588,4.651632238,15.45170531,4.651038649,16.72760878,4.675704231,18.70206862,4.600823329,20.80615546,4.625122718,23.55220639,4.59998334
+11.11124329,1.934046744,10.26372981,3.429269764,10.41755932,4.433699026,11.70510613,4.652061496,13.18443504,4.626793863,15.5285179,4.626194361,16.72760878,4.700795946,18.8416977,4.551811433,20.90958578,4.600416863,23.61067448,4.575420755
+11.16647884,1.923715715,10.31475225,3.410951756,10.46934647,4.386476093,11.76329385,4.602512803,13.24997672,4.602079082,15.56706727,4.601491817,16.81076407,4.650728187,18.8416977,4.576238289,21.01353027,4.57584298,23.72804646,4.550980392
+11.22198897,1.913439871,10.34035851,3.392738256,10.52139106,4.363045009,11.76329385,4.627211744,13.31584421,4.57749632,15.64445335,4.576912191,16.89433274,4.625885557,18.93536243,4.527497183,21.11799148,4.527106084,23.78695107,4.526679469
+11.27777505,1.898132659,10.36602833,3.374622012,10.54751029,4.339747607,11.82177084,4.577927724,13.34890065,4.553053809,15.68329053,4.552472799,16.97831684,4.601175628,19.02949277,4.503312812,21.11799148,4.551400361,23.90519935,4.502499465
+11.33383846,1.887993471,10.41755932,3.356595913,10.57369437,4.316574605,11.88053852,4.55347397,13.4152599,4.528732923,15.76125437,4.528155017,17.06271843,4.576597691,19.12409105,4.479257625,21.22297198,4.502923802,24.02403545,4.478448623
+11.39018056,1.872889826,10.46934647,3.338666104,10.62625769,4.293516912,11.93959835,4.529150839,13.44856314,4.504550794,15.83960578,4.503967132,17.11921913,4.548098244,19.2191596,4.455330933,21.32847435,4.478870693,24.1434623,4.454526253
+11.44680275,1.862885477,10.4953365,3.320838589,10.67908231,4.270582385,11.99895177,4.480911257,13.51541783,4.480488995,15.91834668,4.47990845,17.1475396,4.527852757,19.31470074,4.43153205,21.43450119,4.454946068,24.26348284,4.430731668
+11.50370641,1.852934568,10.52139106,3.303106269,10.70559301,4.247778706,11.99895177,4.504957634,13.58260487,4.456555726,15.99747902,4.455978282,17.23278243,4.503666486,19.41071683,4.407860292,21.54105511,4.431149241,24.32371667,4.407072838
+11.56089295,1.838111388,10.57369437,3.285462183,10.73216953,4.225096792,12.05860024,4.456975732,13.65012591,4.4327503,16.03719258,4.432184642,17.31844901,4.479609411,19.50721023,4.384314981,21.64813872,4.407479528,24.44463328,4.383531733
+11.61836377,1.828292814,10.62625769,3.267912346,10.78552065,4.202527742,12.11854524,4.433168063,13.68401219,4.409080691,16.07700474,4.408518054,17.40454145,4.45568084,19.55563666,4.360904003,21.75575466,4.38393625,24.56615098,4.360116377
+11.67612029,1.813666764,10.67908231,3.250456255,10.83913698,4.180079249,12.17878823,4.409487566,13.7179826,4.385537471,16.15692578,4.384969229,17.49106187,4.431880087,19.60418331,4.337618033,21.86390557,4.360518734,24.62713618,4.336834613
+11.73416392,1.803978765,10.70559301,3.233099755,10.86604502,4.157758831,12.2191165,4.382028749,13.78617662,4.362111401,16.23724413,4.361546195,17.5780124,4.40820647,19.70163845,4.314447932,21.91818247,4.337234821,24.74956113,4.313668697
+11.7924961,1.794342515,10.73216953,3.215835935,10.89301986,4.135557597,12.23933069,4.362522507,13.85470964,4.338810465,16.31796175,4.338248278,17.62164962,4.384667919,19.79957807,4.291401599,21.97259411,4.314075237,24.87259468,4.290626526
+11.85111825,1.784757739,10.78552065,3.198658018,10.94717059,4.113466836,12.30017412,4.339219375,13.92358335,4.315633995,16.39908063,4.315074811,17.70924931,4.361246493,19.89800455,4.268478371,22.08182296,4.291030894,24.99623984,4.267707438
+11.91003183,1.770479964,10.83913698,3.181571859,11.00159051,4.091494076,12.36132002,4.31604072,13.95814849,4.292589754,16.48060276,4.292025128,17.75321233,4.337958694,19.99692032,4.245677591,22.1915948,4.268109646,25.12049965,4.244910777
+11.96923827,1.756316408,10.89301986,3.16457697,11.05628096,4.069638687,12.42276987,4.292985879,13.99279943,4.269668562,16.52151567,4.269106952,17.84146604,4.314786774,20.09632782,4.222998606,22.30191234,4.245310836,25.18286101,4.222244177
+12.02873903,1.746934755,10.92006166,3.147679041,11.11124329,4.026293327,12.46390606,4.266252542,14.0623596,4.246861425,16.56253015,4.246311151,17.93015847,4.291738631,20.19622949,4.200440764,22.41277828,4.22263381,25.30804855,4.199690365
+12.08853558,1.737603215,10.97434682,3.130865195,11.11124329,4.047900042,12.48452521,4.247261668,14.13226557,4.224176116,16.64486482,4.223628781,18.0192918,4.268813602,20.29662778,4.178003418,22.52419534,4.200077917,25.3708755,4.177265229
+12.14862939,1.728321522,11.02890184,3.114141164,11.16647884,4.004786219,12.54658754,4.224574221,14.20251905,4.201611984,16.72760878,4.201067573,18.10886823,4.246011032,20.34701393,4.155694084,22.63616628,4.177642509,25.49699768,4.154951679
+12.20902193,1.719089408,11.05628096,3.097512548,11.22198897,3.983393994,12.60895838,4.202007963,14.23777664,4.179176587,16.81076407,4.178626879,18.19888996,4.200787147,20.39752517,4.133503876,22.74869384,4.155326944,25.62374684,4.132757321
+12.2697147,1.705336968,11.11124329,3.080966675,11.27777505,3.94096722,12.67163929,4.179562246,14.27312176,4.156860989,16.89433274,4.156306056,18.19888996,4.223330265,20.49892413,4.111424085,22.86178079,4.133130581,25.75112608,4.110681518
+12.33070917,1.69622763,11.16647884,3.064509184,11.27777505,3.96211604,12.71359957,4.153535223,14.34407545,4.134656432,16.93627273,4.13411258,18.2893592,4.178347951,20.60082716,4.089462236,22.91853491,4.111060856,25.81505297,4.088731663
+12.39200686,1.682658081,11.1941995,3.048145589,11.36197458,3.919908199,12.73463179,4.135046101,14.41538187,4.112570484,17.02046532,4.112029537,18.38027817,4.156028618,20.70323676,4.067617701,22.97542992,4.089108976,25.87913855,4.066899015
+12.45360926,1.673669886,11.22198897,3.03186937,11.39018056,3.898977019,12.79793743,4.112958071,14.48704275,4.090602512,17.10507644,4.090064455,18.47164911,4.133828507,20.80615546,4.045889851,23.14696379,4.067258342,26.00778738,4.045175005
+12.5155179,1.664729703,11.27777505,3.015674141,11.44680275,3.878149992,12.86155777,4.090988029,14.55905988,4.068751885,17.19010818,4.068216703,18.56347428,4.111746982,20.90958578,4.024278065,23.26203059,4.045532412,26.13707574,4.023567037
+12.5777343,1.655837275,11.33383846,2.999565421,11.50370641,3.857434215,12.92549438,4.069135343,14.59520258,4.047025923,17.23278243,4.046493598,18.65575591,4.089783408,21.01353027,4.002781721,23.31977833,4.023930435,26.26700681,4.002074491
+12.64025998,1.642590843,11.39018056,2.983542749,11.56089295,3.836829096,12.98974883,4.036582913,14.63143501,4.025415972,17.31844901,4.024878587,18.7484963,4.04622349,21.11799148,3.981400204,23.43570422,4.002435949,26.33221437,3.980704567
+12.70309649,1.629450379,11.44680275,2.951765301,11.58959274,3.816341534,13.05432269,4.004290897,14.70416993,4.00391355,17.40454145,4.003379035,18.7484963,4.067937157,21.22297198,3.9601329,23.55220639,3.981056278,26.52880989,3.938298705
+12.76624537,1.620746402,11.44680275,2.967605664,11.61836377,3.795963371,13.11921757,3.982901318,14.77726642,3.982525987,17.49106187,3.981994327,18.8416977,4.024609921,21.27565777,3.938986932,23.66928772,3.959790811,26.52880989,3.959433205
+12.82970816,1.612088918,11.53226423,2.935992196,11.67612029,3.775686608,13.18443504,3.961625995,14.85072629,3.961252669,17.5780124,3.960723849,18.93536243,4.003111805,21.38142205,3.917946185,23.78695107,3.938638937,26.66068833,3.917261634
+12.89348645,1.60347768,11.56089295,2.920314844,11.73416392,3.755518156,13.24997672,3.940464318,14.92455133,3.919061719,17.66539517,3.939566991,19.02949277,3.981728524,21.43450119,3.897025482,23.90519935,3.917600049,26.79322235,3.896336937
+12.95758178,1.59491244,11.61836377,2.904715502,11.7924961,3.715518467,13.31584421,3.898494784,14.92455133,3.940092986,17.70924931,3.918530839,19.12409105,3.960459466,21.54105511,3.876208879,24.02403545,3.896673543,26.92641522,3.875524012
+13.02199574,1.586392953,11.67612029,2.889199486,11.7924961,3.735457438,13.31584421,3.919415679,14.99874337,3.898127406,17.75321233,3.897607014,19.2191596,3.93930402,21.64813872,3.855503471,24.1434623,3.87585882,27.06027022,3.854822263
+13.0867299,1.577918974,11.70510613,2.873771994,11.85111825,3.695671414,13.38203914,3.877670332,15.07330423,3.877304917,17.84146604,3.876787305,19.31470074,3.91826158,21.75575466,3.834908665,24.26348284,3.855155283,27.19479062,3.834231095
+13.15178588,1.565295875,11.73416392,2.85842688,11.91003183,3.675930377,13.44856314,3.856957118,15.14823574,3.856593655,17.93015847,3.856078807,19.41071683,3.89733154,21.86390557,3.814423869,24.32371667,3.834569865,27.32997974,3.813749919
+13.21716525,1.55693459,11.7924961,2.843158122,11.96923827,3.65629479,13.51541783,3.836354547,15.22353975,3.835993025,18.0192918,3.835480928,19.50721023,3.876513303,21.97259411,3.794048496,24.44463328,3.814086879,27.46584091,3.793378146
+13.28286964,1.544479362,11.85111825,2.827970925,12.02873903,3.636764089,13.58260487,3.815862028,15.2992181,3.815502437,18.10886823,3.814993075,19.5718055,3.85237343,22.08182296,3.773781962,24.56615098,3.793713306,27.60237746,3.773115192
+13.34890065,1.536229272,11.91003183,2.812864853,12.05860024,3.617344817,13.62758168,3.792099843,15.37527267,3.774863861,18.19888996,3.794614662,19.60418331,3.835224905,22.1915948,3.753623684,24.74956113,3.773441154,27.73959275,3.752960477
+13.4152599,1.52802325,11.93959835,2.797844966,12.11854524,3.598022175,13.65012591,3.775219621,15.37527267,3.795121303,18.2893592,3.774345103,19.70163845,3.81473842,22.30191234,3.733573086,24.81100164,3.753292066,27.87749016,3.732913421
+13.48194905,1.519861063,11.99895177,2.782899816,12.14862939,3.578809774,13.7179826,3.755053664,15.45170531,3.754699804,18.38027817,3.754183818,19.79957807,3.794361367,22.41277828,3.713629591,24.87259468,3.733250568,28.01607308,3.712973449
+13.54896971,1.511742475,12.05860024,2.768034499,12.20902193,3.559692972,13.78617662,3.734995427,15.5285179,3.734643457,18.47164911,3.724150949,19.89800455,3.774093161,22.52419534,3.683921149,24.99623984,3.713308796,28.15534492,3.69313999
+13.61632354,1.503667253,12.08853558,2.753253993,12.2697147,3.540678286,13.85470964,3.715044334,15.60571235,3.714694245,18.56347428,3.694358339,19.99692032,3.753933221,22.63616628,3.654450371,25.12049965,3.693473546,28.29530909,3.673412475
+13.68401219,1.491638157,12.14862939,2.738547033,12.33070917,3.521765171,13.92358335,3.695199814,15.68329053,3.694851594,18.65575591,3.674624316,20.09632782,3.733880969,22.74869384,3.634929523,25.24537718,3.673744249,28.43596904,3.653790338
+13.75203734,1.47970529,12.20902193,2.723918634,12.36132002,3.50295996,13.99279943,3.65584257,15.76125437,3.675114936,18.7484963,3.654995705,20.19622949,3.71393583,22.86178079,3.615512949,25.3708755,3.65412034,28.57732824,3.634273016
+13.82040065,1.471801201,12.2697147,2.709368374,12.42276987,3.484248323,13.99279943,3.675461296,15.80038151,3.655490882,18.8416977,3.635471944,20.26310635,3.690808361,22.97542992,3.596200091,25.49699768,3.634601254,28.71939015,3.614859948
+13.8891038,1.463939333,12.30017412,2.694901128,12.45360926,3.465643441,14.0623596,3.636314285,15.83960578,3.635971614,18.93536243,3.616052472,20.29662778,3.67437903,23.089644,3.576990397,25.62374684,3.615186434,28.86215827,3.595550579
+13.95814849,1.45611946,12.36132002,2.68050587,12.5155179,3.447131137,14.13226557,3.616890314,15.91834668,3.616549474,19.02949277,3.596736733,20.39752517,3.65475173,23.20442587,3.557883314,25.75112608,3.59587532,29.00563611,3.576344354
+14.0275364,1.448341358,12.39200686,2.666192742,12.54658754,3.42872445,14.20251905,3.597570099,15.99747902,3.597231079,19.12409105,3.577524172,20.49892413,3.635229272,23.31977833,3.538878294,25.87913855,3.576667361,29.1498272,3.557240722
+14.09726926,1.440604804,12.45360926,2.651950834,12.60895838,3.410409354,14.27312176,3.578353086,16.07700474,3.578015878,19.1715664,3.558421224,20.60082716,3.615811097,23.43570422,3.519974794,26.00778738,3.557562003,29.29473509,3.538239135
+14.16734876,1.432909577,12.5155179,2.637785003,12.67163929,3.392192091,14.34407545,3.549726835,16.15692578,3.558903317,19.2191596,3.539420281,20.70323676,3.596496647,23.55220639,3.501172269,26.13707574,3.5385587,29.44036333,3.519339049
+14.23777664,1.425255455,12.5777343,2.62369484,12.70309649,3.374078763,14.41538187,3.52132959,16.23724413,3.539892849,19.31470074,3.520513885,20.80615546,3.577285368,23.61067448,3.482477018,26.26700681,3.519656907,29.58671551,3.50053992
+14.30855463,1.417642218,12.60895838,2.609685066,12.76624537,3.356055566,14.48704275,3.502519828,16.27755291,3.520990842,19.41071683,3.50170848,20.90958578,3.558176709,23.72804646,3.463874794,26.35398617,3.497739255,29.73379522,3.48184121
+14.37968446,1.410069649,12.67163929,2.595745003,12.82970816,3.338128643,14.55905988,3.483810542,16.35847091,3.50218289,19.50721023,3.483003528,21.01353027,3.539170123,23.84600191,3.445371937,26.39758379,3.482169355,29.88160609,3.481827538
+14.45116789,1.40253753,12.73463179,2.581879404,12.89348645,3.32029748,14.63143501,3.465201195,16.39908063,3.483482243,19.60418331,3.464398492,21.11799148,3.520265063,23.96454374,3.426967916,26.52880989,3.463568774,30.03015175,3.463228783
+14.52300668,1.395045645,12.76624537,2.568092913,12.92549438,3.302568049,14.70416993,3.446691252,16.48060276,3.464874649,19.70163845,3.445892837,21.22297198,3.482771034,24.02403545,3.408668895,26.66068833,3.445067551,30.17943586,3.444729377
+14.59520258,1.387593779,12.82970816,2.554375022,12.95758178,3.284933287,14.77726642,3.419118275,16.56253015,3.446366451,19.79957807,3.427486034,21.22297198,3.501460988,24.1434623,3.390460929,26.79322235,3.426665156,30.32946207,3.426328788
+14.66775738,1.380181718,12.89348645,2.540730407,13.02199574,3.267386275,14.85072629,3.391765877,16.64486482,3.427957117,19.8487303,3.409184246,21.32847435,3.464167239,24.26348284,3.372350224,26.92641522,3.40836106,30.48023408,3.408026489
+14.74067287,1.37280925,12.95758178,2.527158678,13.0867299,3.249932994,14.92455133,3.373648202,16.72760878,3.40964612,19.99692032,3.39096687,21.43450119,3.44566282,24.38410002,3.354336261,27.06027022,3.390154739,30.55590092,3.38982861
+14.81395082,1.361826997,12.98974883,2.513664379,13.11921757,3.232579289,14.99874337,3.355627304,16.81076407,3.391432935,20.04656245,3.372860084,21.54105511,3.427257245,24.50531681,3.336418521,27.19479062,3.372045669,30.7077986,3.371721282
+14.88759305,1.354552574,13.05432269,2.500237227,13.18443504,3.215311934,15.07330423,3.337702669,16.8524966,3.37332366,20.09632782,3.354849984,21.64813872,3.408949986,24.62713618,3.318596493,27.32997974,3.354033332,30.9370621,3.353704094
+14.96160136,1.347317008,13.11921757,2.486881798,13.21716525,3.198143096,15.14823574,3.311001583,16.93627273,3.355304497,20.22406798,3.345867526,21.75575466,3.390740519,24.74956113,3.300869664,27.46584091,3.336117211,31.09085458,3.335789731
+15.03597759,1.340120093,13.15178588,2.473602566,13.28286964,3.181059688,15.22353975,3.284514101,16.97831684,3.337388138,20.29662778,3.336916398,21.86390557,3.37262832,24.87259468,3.283237525,27.60237746,3.318296792,31.24541159,3.317971062
+15.11072354,1.329399347,13.21716525,2.460389411,13.34890065,3.164067534,15.2992181,3.266969328,17.06271843,3.31956093,20.34701393,3.319098226,21.97259411,3.354612871,24.99623984,3.265699571,27.73959275,3.300571564,31.40073691,3.300247573
+15.18584107,1.322298141,13.28286964,2.447246836,13.4152599,3.147166147,15.37527267,3.249518274,17.1475396,3.301828949,20.39752517,3.301375198,22.08182296,3.336693654,25.12049965,3.2482553,27.87749016,3.282941018,31.55683439,3.282618758
+15.26133202,1.315234868,13.34890065,2.434174465,13.44856314,3.130361187,15.45170531,3.232160437,17.23278243,3.284191687,20.49892413,3.283740359,22.1915948,3.318870156,25.24537718,3.213658422,28.01607308,3.265404648,31.71370784,3.265084109
+15.33719824,1.308209325,13.4152599,2.421171921,13.51541783,3.113639847,15.5285179,3.214895321,17.31844901,3.266648636,20.60082716,3.26619972,22.30191234,3.301141865,25.24537718,3.23090421,28.08562267,3.247968329,31.87136114,3.230307989
+15.41344161,1.301221309,13.44856314,2.408243561,13.58260487,3.097007828,15.60571235,3.197722428,17.40454145,3.249199295,20.70323676,3.248752777,22.41277828,3.283508272,25.3708755,3.196492137,28.15534492,3.230625114,31.87136114,3.247643125
+15.49006399,1.294270622,13.51541783,2.395379532,13.61632354,3.080470699,15.68329053,3.163663771,17.49106187,3.231843162,20.80615546,3.231399029,22.52419534,3.265968873,25.49699768,3.179417548,28.29530909,3.213368198,32.02979815,3.213052768
+15.56706727,1.283916664,13.54896971,2.382588896,13.68401219,3.064015858,15.68329053,3.180641268,17.5780124,3.21457974,20.90958578,3.214137979,22.63616628,3.248523162,25.62374684,3.162434166,28.43596904,3.196203463,32.26893166,3.195883443
+15.64445335,1.277058412,13.61632354,2.369861905,13.75203734,3.047648913,15.76125437,3.146764541,17.62164962,3.197414811,21.01353027,3.196969132,22.74869384,3.213923432,25.75112608,3.145541503,28.57732824,3.179130417,32.42934505,3.178812106
+15.72222413,1.270236794,13.68401219,2.357202898,13.82040065,3.031369394,15.83960578,3.12995558,17.70924931,3.180335294,21.11799148,3.179891996,22.74869384,3.231170641,25.87913855,3.128739076,28.71939015,3.162148568,32.59055588,3.161831958
+15.80038151,1.260075104,13.75203734,2.34461151,13.8891038,3.015176836,15.91834668,3.113236407,17.75321233,3.16335322,21.22297198,3.162906079,22.86178079,3.196755731,26.00778738,3.112026401,28.86215827,3.145257431,32.67146157,3.144948686
+15.87892742,1.253344205,13.82040065,2.332087382,13.95814849,2.999070773,15.99747902,3.096606543,17.84146604,3.146455648,21.32847435,3.129218248,22.97542992,3.179679734,26.13707574,3.095403,29.00563611,3.128456521,32.83387599,3.128149426
+15.9578638,1.246649261,13.8891038,2.319630154,13.99279943,2.983056599,16.07700474,3.080065509,17.93015847,3.129648337,21.32847435,3.146010896,23.089644,3.162694951,26.26700681,3.078868395,29.1498272,3.111745356,32.9970978,3.111439901
+16.03719258,1.239990079,13.92358335,2.307243997,14.0623596,2.967122112,16.15692578,3.055425479,18.0192918,3.112930806,21.43450119,3.112503014,23.20442587,3.145800896,26.39758379,3.062422113,29.29473509,3.095123456,33.16113101,3.094819632
+16.11691572,1.233366467,13.99279943,2.294919474,14.09726926,2.951278535,16.23724413,3.030982565,18.10886823,3.096302574,21.54105511,3.095877067,23.31977833,3.128997083,26.52880989,3.046063681,29.44036333,3.078590345,33.32597965,3.078288144
+16.19703517,1.226778237,14.0275364,2.282665265,14.20251905,2.935508031,16.31796175,3.014792073,18.19888996,3.079763164,21.64813872,3.07933993,23.43570422,3.11228303,26.66068833,3.029792631,29.58671551,3.062145548,33.49164777,3.061844961
+16.27755291,1.2202252,14.09726926,2.270472033,14.23777664,2.919833265,16.39908063,2.998688065,18.2440685,3.063318116,21.75575466,3.062891129,23.55220639,3.095658258,26.79322235,3.013608495,29.73379522,3.045788593,33.65813945,3.045489612
+16.35847091,1.213707166,14.16734876,2.258343933,14.34407545,2.904230793,16.48060276,2.982670079,18.2893592,3.046960881,21.86390557,3.046530192,23.66928772,3.07912229,26.92641522,2.997510809,29.88160609,3.029519012,33.82545879,3.029221629
+16.43979116,1.207223949,14.23777664,2.246280617,14.37968446,2.888723038,16.56253015,2.966737656,18.38027817,3.030685038,21.97259411,3.03025665,23.78695107,3.062674651,27.06027022,2.981499112,29.95578685,3.013342254,33.9936099,3.013040543
+16.43979116,1.200780079,14.30855463,2.23428174,14.45116789,2.873292448,16.64486482,2.943004231,18.47164911,3.014496135,22.08182296,3.014070035,23.90519935,3.046314871,27.19479062,2.949743431,30.17943586,2.997240106,34.1625969,2.996945891
+16.52151567,1.194365915,14.37968446,2.222346956,14.52300668,2.857944284,16.72760878,2.927283689,18.56347428,2.998393708,22.1915948,2.997969884,24.02403545,3.030042478,27.19479062,2.965572944,30.32946207,2.981229855,34.33242397,2.980937211
+16.60364645,1.187986013,14.41538187,2.210480264,14.59520258,2.842678104,16.81076407,2.903865889,18.65575591,2.982377294,22.24668519,2.981961589,24.1434623,3.013857008,27.32997974,2.933986891,30.48023408,2.957380494,34.50309527,2.965014044
+16.68618551,1.184806526,14.48704275,2.19867262,14.66775738,2.827493471,16.89433274,2.888354411,18.7484963,2.966446435,22.41277828,2.966027127,24.26348284,2.997757995,27.46584091,2.918314517,30.63175561,2.941583159,34.674615,2.949175934
+16.76913488,1.175328264,14.55905988,2.186928048,14.74067287,2.812389949,16.97831684,2.872925791,18.8416977,2.950600673,22.46841775,2.950189397,24.38410002,2.981744977,27.60237746,2.90272586,30.78403037,2.925870209,34.84698738,2.933422425
+16.8524966,1.169050055,14.59520258,2.175250483,14.81395082,2.797367106,17.06271843,2.857579585,18.93536243,2.919174088,22.52419534,2.934436237,24.50531681,2.949986677,27.73959275,2.887220472,30.9370621,2.902463716,35.02021665,2.917753067
+16.93627273,1.162805382,14.66775738,2.163631025,14.88759305,2.782424509,17.1475396,2.842315354,18.93536243,2.934839554,22.63616628,2.918761462,24.50531681,2.965817496,27.87749016,2.871797908,31.09085458,2.886959729,35.19430706,2.902167409
+17.02046532,1.156594065,14.74067287,2.152073633,14.96160136,2.767561731,17.23278243,2.827132658,19.02949277,2.90358084,22.74869384,2.903170418,24.62713618,2.934228838,28.01607308,2.856457727,31.24541159,2.886948392,35.36926291,2.886665004
+17.10507644,1.150415928,14.81395082,2.140577978,15.03597759,2.752778344,17.31844901,2.80451605,19.12409105,2.888070885,22.86178079,2.887662655,24.74956113,2.918555171,28.15534492,2.841199488,31.40073691,2.871527282,35.54508848,2.871245408
+17.19010818,1.144270792,14.88759305,2.129143728,15.11072354,2.738073926,17.40454145,2.782080372,19.2191596,2.872643779,22.97542992,2.87223773,24.87259468,2.902965229,28.29530909,2.826022754,31.55683439,2.856188547,35.7217881,2.855908178
+17.27556262,1.138158481,14.92455133,2.117774715,15.14823574,2.7234534,17.49106187,2.767219431,19.31470074,2.857299079,23.089644,2.856895199,24.99623984,2.887458562,28.43596904,2.810927088,31.71370784,2.840931746,35.89936613,2.840652874
+17.36144187,1.13207882,14.99874337,2.106462273,15.22353975,2.708905626,17.5780124,2.752437873,19.41071683,2.842036346,23.20442587,2.841634624,25.12049965,2.872034727,28.57732824,2.795912058,31.87136114,2.825756441,36.07782692,2.825479059
+17.44774803,1.126031635,15.07330423,2.095210258,15.2992181,2.69443556,17.66539517,2.737735274,19.50721023,2.826855141,23.31977833,2.826455565,25.24537718,2.856693281,28.71939015,2.780977234,32.02979815,2.810662198,36.25717486,2.810386298
+17.53448324,1.120016752,15.14823574,2.084018347,15.33719824,2.680048051,17.75321233,2.72311121,19.60418331,2.811755029,23.43570422,2.811357587,25.3708755,2.841433784,28.86215827,2.766122186,32.18902277,2.795648584,36.43741437,2.795374157
+17.62164962,1.114033998,15.18584107,2.07289029,15.41344161,2.665732134,17.84146604,2.708565263,19.65285047,2.796741068,23.55220639,2.796340258,25.49699768,2.826255797,29.00563611,2.75134649,32.34903892,2.780715167,36.61854987,2.780442206
+17.70924931,1.108083202,15.26133202,2.061817605,15.49006399,2.651492687,17.93015847,2.694097016,19.75054755,2.781801815,23.66928772,2.781403146,25.62374684,2.811158887,29.07764228,2.736655093,32.50985054,2.765861519,36.80058583,2.765590016
+17.79728448,1.102164193,15.33719824,2.050804067,15.56706727,2.637329302,17.98953157,2.677320301,19.8487303,2.766942363,23.78695107,2.766545824,25.70859613,2.793653203,29.29473509,2.707501907,32.67146157,2.751087214,36.9835267,2.750817162
+17.88575728,1.096276802,15.41344161,2.03984936,15.64445335,2.623241574,18.0192918,2.665402429,19.89800455,2.752167689,23.84600191,2.751773266,25.75112608,2.781217484,29.29473509,2.722031455,32.91538572,2.736386457,37.16737701,2.73612322
+17.97466989,1.090420859,15.49006399,2.028953169,15.72222413,2.609229097,18.10886823,2.651164743,19.99692032,2.737466532,23.96454374,2.737074217,25.87913855,2.766361153,29.44036333,2.69303934,33.07901273,2.721769598,37.35214126,2.721507767
+18.0640245,1.084596196,15.56706727,2.018115182,15.80038151,2.595291471,18.19888996,2.637003111,20.09632782,2.722843904,24.08367485,2.722453684,26.00778738,2.75158418,29.58671551,2.678654027,33.32597965,2.707225503,37.537824,2.706970386
+18.1538233,1.078802647,15.60571235,2.007339028,15.87892742,2.581428294,18.2893592,2.622917124,20.19622949,2.708299385,24.20339818,2.70791125,26.13707574,2.73688614,29.73379522,2.664345556,33.49164777,2.692764412,37.63101123,2.692515944
+18.2440685,1.073040045,15.68329053,1.996616497,15.91834668,2.567644211,18.38027817,2.608906381,20.29662778,2.693832558,24.26348284,2.693451784,26.26700681,2.722266612,29.88160609,2.650113516,33.57479041,2.678385827,37.81808027,2.678133427
+18.33476233,1.067308225,15.72222413,1.98595514,15.99747902,2.553928717,18.47164911,2.594970478,20.39752517,2.679443008,24.38410002,2.679064269,26.39758379,2.707725177,30.03015175,2.635957498,33.74169541,2.664078788,37.91196323,2.663832967
+18.42590701,1.061607023,15.80038151,1.975346834,16.03719258,2.540291474,18.56347428,2.581109016,20.49892413,2.665130323,24.50531681,2.664753606,26.52880989,2.693261418,30.17943586,2.621877098,33.82545879,2.649853375,38.10042892,2.649603664
+18.51750478,1.055936274,15.87892742,1.964795194,16.11691572,2.526722089,18.65575591,2.567321598,20.60082716,2.65089409,24.62713618,2.650519386,26.66068833,2.678874919,30.32946207,2.60787191,33.9936099,2.635698747,38.2898315,2.63545037
+18.60955789,1.050295817,15.9578638,1.954299917,16.19703517,2.513225187,18.7484963,2.553607827,20.70323676,2.636733903,24.74956113,2.6363612,26.79322235,2.664565267,30.48023408,2.593941533,34.1625969,2.621619729,38.48017563,2.621372679
+18.70206862,1.041893619,16.03719258,1.943860702,16.27755291,2.499800381,18.8416977,2.539967311,20.80615546,2.622649355,24.87259468,2.622278643,26.92641522,2.650332054,30.63175561,2.580085567,34.33242397,2.607615916,38.67146599,2.607370185
+18.79503923,1.036328172,16.11691572,1.93347725,16.35847091,2.486447286,18.93536243,2.526399657,20.90958578,2.594715751,24.99623984,2.60827131,27.06027022,2.636174869,30.78403037,2.566303615,34.50309527,2.593686906,38.86370728,2.593442488
+18.88847201,1.030792455,16.19703517,1.923149264,16.43979116,2.473165519,19.02949277,2.512904478,20.90958578,2.608640042,25.12049965,2.5943388,27.19479062,2.622093307,30.9370621,2.552595282,34.674615,2.579832301,39.05690422,2.579589188
+18.98236925,1.025286307,16.23724413,1.912880201,16.52151567,2.459954698,19.12409105,2.492801645,21.06569612,2.580850582,25.24537718,2.580480712,27.32997974,2.608086964,31.09085458,2.538960174,34.84698738,2.566051702,39.25106158,2.565809888
+19.07673328,1.019809572,16.31796175,1.902662236,16.56253015,2.446819249,19.2191596,2.472859631,21.17041666,2.567064544,25.3708755,2.56669665,27.46584091,2.594155438,31.24541159,2.525397901,35.02021665,2.552344714,39.44618412,2.552104192
+19.1715664,1.014362091,16.35847091,1.892502569,16.60364645,2.43375394,19.31470074,2.459650445,21.22297198,2.55335716,25.43385841,2.55299123,27.60237746,2.573402611,31.40073691,2.511908072,35.13618098,2.536450721,39.64227664,2.538471708
+19.26687094,1.006247357,16.48060276,1.882389759,16.68618551,2.420753643,19.41071683,2.446511817,21.32847435,2.539717982,25.5602937,2.539354007,27.73959275,2.559656357,31.55683439,2.498490302,35.19430706,2.525159918,39.83934396,2.524912043
+19.36264927,1.000872321,16.56253015,1.872334664,16.76913488,2.407822789,19.50721023,2.433443371,21.43450119,2.526151661,25.68735751,2.52578963,27.87749016,2.539179517,31.71370784,2.485144205,35.36926291,2.511671361,40.03739093,2.51142481
+19.45890371,0.995525997,16.64486482,1.862333281,16.8524966,2.394961007,19.60418331,2.420444733,21.54105511,2.512657806,25.75112608,2.512302641,28.01607308,2.525616071,31.87136114,2.471869398,35.54508848,2.498254855,40.23642242,2.498009621
+19.55563666,0.990208231,16.68618551,1.852388958,16.93627273,2.382167929,19.70163845,2.407515529,21.64813872,2.499236031,25.87913855,2.498882763,28.15534492,2.512125078,32.02979815,2.458665501,35.7217881,2.484910016,40.43644333,2.484666092
+19.65285047,0.984918871,16.76913488,1.842494117,17.02046532,2.369443187,19.79957807,2.394655389,21.75575466,2.48588595,26.00778738,2.48553457,28.29530909,2.498706148,32.18902277,2.445532135,35.89936613,2.47163646,40.63745857,2.471393839
+19.75054755,0.979657765,16.8524966,1.832652132,17.06271843,2.356791043,19.89800455,2.381863943,21.86390557,2.472607181,26.13707574,2.472257678,28.43596904,2.485358898,32.34903892,2.432468922,36.07782692,2.458433807,40.83947308,2.458192482
+19.8487303,0.974424762,16.93627273,1.822862719,17.1475396,2.344201856,19.99692032,2.369140825,21.91818247,2.459404172,26.26700681,2.459051706,28.57732824,2.472082944,32.50985054,2.419475489,36.16738972,2.445306479,41.04249183,2.445061642
+19.94740112,0.969219711,17.02046532,1.813125598,17.23278243,2.331679916,20.09632782,2.356485669,22.02714083,2.44626686,26.39758379,2.445916277,28.71939015,2.458877906,32.67146157,2.406551463,36.34718289,2.432244472,41.24651982,2.432000943
+,,17.10507644,1.803440489,17.31844901,2.319224864,20.14621673,2.343902715,22.13664084,2.433199723,26.52880989,2.432851013,28.86215827,2.445743405,32.83387599,2.393696472,36.43741437,2.419256988,41.45156207,2.41901001
+,,17.19010818,1.793807115,17.40454145,2.306836343,20.29662778,2.331377796,22.24668519,2.420202386,26.66068833,2.419855539,29.00563611,2.432679065,32.9970978,2.380910148,36.61854987,2.406334129,41.6576236,2.40608847
+,,17.27556262,1.784225199,17.44774803,2.294518502,20.3638371,2.31685981,22.35727659,2.407274477,26.72687319,2.406934208,29.1498272,2.419684509,33.16113101,2.368192125,36.80058583,2.393480299,41.8647095,2.393235952
+,,17.31844901,1.774697951,17.53448324,2.282261953,20.39752517,2.306546499,22.41277828,2.394420325,26.85973623,2.394077173,29.29473509,2.406759366,33.37191619,2.349244405,36.9835267,2.38069513,41.96863817,2.380456762
+,,17.40454145,1.765218109,17.62164962,2.270070876,20.49892413,2.294225701,22.52419534,2.381630135,26.99325975,2.381288815,29.44036333,2.393903265,33.49164777,2.342959522,37.16737701,2.367978255,42.28197477,2.367736512
+,,17.49106187,1.755788906,17.70924931,2.257944918,20.60082716,2.281970717,22.63616628,2.368908265,27.12744703,2.368568769,29.58671551,2.381115837,33.57479041,2.330448793,37.35214126,2.355329309,42.55073562,2.348792438
+,,17.5780124,1.746410071,17.79728448,2.245883734,20.70323676,2.269781195,22.74869384,2.356254352,27.26230138,2.355916669,29.73379522,2.368396714,33.74169541,2.318000318,37.537824,2.34274793,42.70339892,2.342508763
+,,17.62164962,1.737084745,17.88575728,2.233886976,20.80615546,2.257656785,22.86178079,2.343668032,27.39782611,2.343332153,29.88160609,2.355745534,33.82545879,2.305622864,37.72442979,2.330233757,42.91568351,2.329995867
+,,17.70924931,1.727805821,17.97466989,2.221954302,20.90958578,2.24559714,22.97542992,2.331148943,27.53402455,2.330814858,30.03015175,2.343161931,33.9936099,2.293307,37.91196323,2.31778643,43.1290234,2.311356274
+,,17.79728448,1.718576461,18.0192918,2.210089706,21.01353027,2.233601913,23.089644,2.318696727,27.67090005,2.318364427,30.17943586,2.330645546,34.1625969,2.281056923,38.10042892,2.305405592,43.34342383,2.299009784
+,,17.88575728,1.709396403,18.10886823,2.198284148,21.11799148,2.221670761,23.20442587,2.306311027,27.80845598,2.305980502,30.32946207,2.318196019,34.33242397,2.268872282,38.2898315,2.293090889,43.66702453,2.280613597
+,,17.97466989,1.70026538,18.19888996,2.186541652,21.18792062,2.207835944,23.31977833,2.293991487,27.94669572,2.293662728,30.48023408,2.305812994,34.50309527,2.256752728,38.48017563,2.280841966,43.88409944,2.268431324
+,,18.0640245,1.691183133,18.2440685,2.17486615,21.22297198,2.198007943,23.43570422,2.269558388,28.08562267,2.281410751,30.63175561,2.293496114,34.674615,2.244697912,38.67146599,2.268658474,43.99304123,2.256318554
+,,18.1538233,1.6821494,18.33476233,2.163248744,21.32847435,2.186266922,23.43570422,2.281737754,28.22524024,2.26922422,30.78403037,2.281245027,34.84698738,2.232707488,38.86370728,2.256540061,44.21173681,2.244266058
+,,18.2440685,1.673163922,18.42590701,2.151693395,21.43450119,2.174588618,23.55220639,2.257435169,28.36555188,2.257102785,30.9370621,2.269059382,35.02021665,2.220781114,39.05690422,2.244486381,44.43151957,2.232277941
+,,18.2893592,1.664229709,18.51750478,2.140199771,21.54105511,2.162972695,23.72804646,2.245372299,28.50656102,2.245046099,31.09085458,2.25090727,35.19430706,2.208918446,39.25106158,2.232497088,44.65239489,2.220353861
+,,18.38027817,1.655339952,18.60955789,2.128767541,21.64813872,2.15141882,23.84600191,2.233378273,28.64827114,2.233053816,31.24541159,2.238883679,35.36926291,2.197119145,39.44618412,2.220571837,44.87436821,2.208493476
+,,18.47164911,1.646497681,18.70206862,2.117396379,21.75575466,2.139926662,23.90519935,2.221452677,28.79068571,2.221125592,31.40073691,2.226924313,35.54508848,2.185382871,39.64227664,2.208710287,45.097445,2.196696444
+,,18.56347428,1.637702643,18.79503923,2.106085958,21.86390557,2.128495892,24.02403545,2.209586422,28.93380826,2.209261084,31.55683439,2.209109276,35.7217881,2.173709289,39.83934396,2.196912098,45.32163073,2.184962429
+,,18.65575591,1.628954585,18.88847201,2.094835953,21.97259411,2.117126181,24.1434623,2.197783553,29.07764228,2.197459952,31.71370784,2.197308955,35.89936613,2.162098063,40.03739093,2.18517693,45.54693092,2.173291092
+,,18.70206862,1.620256437,18.93536243,2.083650133,22.08182296,2.105817203,24.26348284,2.18604373,29.1498272,2.18572615,31.87136114,2.185571668,36.07782692,2.15054886,40.23642242,2.173504448,45.77335111,2.1616821
+,,18.79503923,1.611601571,18.98236925,2.072524042,22.1915948,2.094568634,24.38410002,2.174366618,29.29473509,2.174050734,32.02979815,2.173897077,36.25717486,2.13906135,40.43644333,2.161894316,46.11509358,2.150130898
+,,18.88847201,1.602992936,19.07673328,2.061453314,22.30191234,2.083380151,24.50531681,2.162751881,29.44036333,2.162437684,32.18902277,2.162284848,36.43741437,2.127635202,40.63745857,2.150346202,46.34433818,2.13864562
+,,18.98236925,1.594430285,19.1715664,2.050441722,22.41277828,2.072251433,24.62713618,2.151199185,29.58671551,2.150886667,32.34903892,2.150734648,36.61854987,2.116270088,40.83947308,2.138859774,46.45938749,2.127225869
+,,19.07673328,1.585913373,19.26687094,2.03948895,22.52419534,2.055673754,24.74956113,2.139708201,29.73379522,2.139397352,32.50985054,2.139246144,36.80058583,2.104965683,41.04249183,2.127434702,46.69034362,2.115862942
+,,19.1715664,1.577441956,19.36264927,2.028594684,22.63616628,2.044693034,24.87259468,2.128278598,29.88160609,2.127969409,32.67146157,2.127819009,36.9835267,2.093721662,41.24651982,2.11607066,46.92244788,2.104560712
+,,19.26687094,1.56901579,19.45890371,2.017758612,22.74869384,2.03377097,24.99623984,2.116910047,30.03015175,2.11660251,32.83387599,2.116452914,37.16737701,2.082537704,41.45156207,2.10476732,47.15570596,2.104552448
+,,19.36264927,1.560634634,19.55563666,2.006980422,22.86178079,2.017501128,25.12049965,2.105602224,30.17943586,2.10529633,32.9970978,2.105147532,37.35214126,2.071413486,41.6576236,2.093524359,47.39012359,2.093310635
+,,19.45890371,1.552298247,19.65285047,1.996259806,22.97542992,2.006724314,25.24537718,2.094354803,30.32946207,2.094050543,33.16113101,2.09390254,37.537824,2.06034869,41.8647095,2.082341454,47.50776904,2.082132959
+,,19.50721023,1.544009422,19.75054755,1.985596456,23.089644,1.996005066,25.3708755,2.083167462,30.48023408,2.082864827,33.32597965,2.082717615,37.72442979,2.049342998,42.07282485,2.071218285,47.74393683,2.071010904
+,,19.60418331,1.535761842,19.8487303,1.974990065,23.20442587,1.985343076,25.49699768,2.07203988,30.55590092,2.071742929,33.49164777,2.071592436,37.91196323,2.038396095,42.28197477,2.060154531,48.10039164,2.059944214
+,,19.65285047,1.527561316,19.94740112,1.964440331,23.31977833,1.974738039,25.62374684,2.060971738,30.63175561,2.060680419,33.65813945,2.060526684,38.10042892,2.027507667,42.4921644,2.049149877,48.33950544,2.038003931
+,,19.79957807,1.519398613,19.99692032,1.953950786,23.43570422,1.964189651,25.75112608,2.049962719,30.78403037,2.049672956,33.82545879,2.049520042,38.2898315,2.016677401,42.59765072,2.038208007,48.33950544,2.048940683
+,,19.89800455,1.511282495,20.14621673,1.94350962,23.55220639,1.953697609,25.87913855,2.039012505,30.9370621,2.03872429,33.9936099,2.038572193,38.48017563,2.005904987,42.80940963,2.027320584,48.57980791,2.027117598
+,,19.99692032,1.503209731,20.2463664,1.933128044,23.66928772,1.943261612,26.00778738,2.028120784,31.09085458,2.027834109,34.1625969,2.027682825,38.67146599,1.995190115,43.02222121,2.016491317,48.82130495,2.021692288
+,,20.09632782,1.495180089,20.29662778,1.922805697,23.78695107,1.93288136,26.13707574,2.017287244,31.24541159,2.0170021,34.33242397,2.016851623,38.86370728,1.984532479,43.1290234,2.005723835,49.18580335,2.005515136
+,,20.2463664,1.487190419,20.34701393,1.912538469,23.90519935,1.922556556,26.20196074,2.006515511,31.40073691,2.006227951,34.50309527,2.006078278,39.05690422,1.973931772,43.34342383,1.995009931,49.43031289,1.994802347
+,,20.34701393,1.479246346,20.49892413,1.902318595,24.02403545,1.912286904,26.33221437,1.995797378,31.55683439,1.995511354,34.674615,1.995362481,39.25106158,1.963387691,43.55889007,1.984353257,49.55302309,1.984150678
+,,20.4481618,1.471344709,20.60082716,1.892157048,24.1434623,1.902072109,26.4631155,1.985136498,31.71370784,1.984852002,34.84698738,1.984703924,39.44618412,1.952899932,43.77542743,1.973753508,49.79935812,1.973552011
+,,20.60082716,1.463482405,20.65196848,1.882053474,24.26348284,1.891911877,26.52880989,1.974536442,31.87136114,1.974249588,35.02021665,1.974102301,39.64227664,1.942468196,43.99304123,1.963210378,50.04691772,1.963009958
+,,20.70323676,1.455664973,20.75463232,1.872000176,24.38410002,1.881805919,26.66068833,1.96398913,32.02979815,1.963703809,35.19430706,1.963557309,39.83934396,1.932092182,44.21173681,1.952723567,50.29570798,1.952524217
+,,20.80615546,1.447889299,20.85780651,1.862000579,24.50531681,1.871753943,26.79322235,1.953498159,32.18902277,1.953214362,35.36926291,1.953068644,40.03739093,1.921771594,44.43151957,1.942292773,50.54573501,1.942094488
+,,20.90958578,1.44015516,20.96149359,1.852054397,24.62713618,1.861755661,26.92641522,1.943063227,32.34903892,1.942780946,35.54508848,1.942636007,40.23642242,1.911506135,44.65239489,1.931917696,50.79700495,1.93172047
+,,21.01353027,1.432462335,21.06569612,1.842161343,24.74956113,1.851810787,27.06027022,1.932684035,32.50985054,1.932403262,35.7217881,1.932259097,40.43644333,1.90129551,44.87436821,1.92159804,51.049524,1.921401867
+,,21.06569612,1.424813399,21.17041666,1.832321135,24.87259468,1.841919035,27.19479062,1.922360285,32.75256811,1.922077238,35.89936613,1.921937617,40.63745857,1.891139427,45.097445,1.911333508,51.30329835,1.911138383
+,,21.22297198,1.417199741,21.27565777,1.82253349,24.99623984,1.832080121,27.32997974,1.912091682,32.91538572,1.911810146,36.07782692,1.911671271,40.83947308,1.881037595,45.2093989,1.901127538,51.55833425,1.900929723
+,,21.32847435,1.409629535,21.38142205,1.812798128,25.12049965,1.822293764,27.46584091,1.901877929,32.9970978,1.901601631,36.25717486,1.901459764,41.04249183,1.870989723,45.43414117,1.890972352,51.81463797,1.890775594
+,,21.43450119,1.402099767,21.4877121,1.803114768,25.24537718,1.812559682,27.60237746,1.891718735,33.16113101,1.891443913,36.43741437,1.891302804,41.24651982,1.860995524,45.66000067,1.880871412,52.07221581,1.880675705
+,,21.54105511,1.39461022,21.59453054,1.793483134,25.3708755,1.802877596,27.73959275,1.881613808,33.32597965,1.881340454,36.61854987,1.881200099,41.45156207,1.85105471,45.88698294,1.870824428,52.46098541,1.870626094
+,,21.64813872,1.38716068,21.64813872,1.783906451,25.49699768,1.793247228,27.87749016,1.871562859,33.49164777,1.871290965,36.80058583,1.8661508,41.6576236,1.841166996,46.11509358,1.860831112,52.85265756,1.860630183
+,,21.75575466,1.379750933,21.75575466,1.774377421,25.62374684,1.783668303,28.01607308,1.861565598,33.65813945,1.861295156,36.9835267,1.856182448,41.8647095,1.8313321,46.34433818,1.850891176,53.11539554,1.850691321
+,,21.80976307,1.372383461,21.86390557,1.764899292,25.75112608,1.774140545,28.15534492,1.851621739,33.82545879,1.851352742,37.16737701,1.846267344,42.07282485,1.821549738,46.5747224,1.841004336,53.37943963,1.840805549
+,,21.91818247,1.365052649,21.97259411,1.755471792,25.87913855,1.759947705,28.29530909,1.841730996,33.9936099,1.841463436,37.35214126,1.836405203,42.17727017,1.811823188,46.92244788,1.831166713,53.64479632,1.830972583
+,,22.02714083,1.357760996,22.08182296,1.746094651,26.00778738,1.750546655,28.43596904,1.831893087,34.1625969,1.831626956,37.537824,1.821714256,42.4921644,1.802141498,47.15570596,1.821385235,53.91147213,1.821192142
+,,22.08182296,1.350510943,22.1915948,1.736767599,26.13707574,1.741195822,28.57732824,1.822107729,34.33242397,1.82184302,37.72442979,1.81198327,42.59765072,1.792518582,47.39012359,1.811656006,54.17947363,1.82118499
+,,22.1915948,1.343296967,22.24668519,1.72749376,26.26700681,1.731894938,28.71939015,1.81237464,34.50309527,1.812111345,37.91196323,1.811976154,42.80940963,1.782943549,47.62570655,1.801978747,54.4488074,1.811456831
+,,22.24668519,1.336124148,22.35727659,1.718266068,26.39758379,1.722643736,28.86215827,1.797875934,34.674615,1.802431654,38.10042892,1.802297186,42.91568351,1.773423144,47.86246062,1.792353181,54.71948007,1.801780636
+,,22.35727659,1.328987021,22.46841775,1.709087667,26.52880989,1.708862863,29.00563611,1.788272284,34.84698738,1.792803669,38.2898315,1.792669919,43.1290234,1.763950112,48.10039164,1.782779032,54.99149829,1.792156129
+,,22.46841775,1.321888019,22.58011141,1.699958294,26.66068833,1.69973469,29.1498272,1.773966392,35.02021665,1.783227113,38.48017563,1.778328847,43.45102339,1.754524238,48.33950544,1.773256024,55.26486875,1.782583032
+,,22.58011141,1.314826936,22.69236031,1.690877687,26.79322235,1.690655278,29.29473509,1.764490459,35.19430706,1.773701712,38.67146599,1.764102501,43.77542743,1.745148732,48.57980791,1.763783885,55.40206317,1.773064552
+,,22.63616628,1.307806139,22.80516722,1.681845586,26.92641522,1.681624364,29.5134487,1.755061697,35.36926291,1.764227192,38.86370728,1.754679257,43.88409944,1.735830141,48.82130495,1.754362343,55.6774746,1.763593436
+,,22.74869384,1.300820278,22.86178079,1.672865015,27.06027022,1.672641691,29.73379522,1.736365282,35.54508848,1.754803283,39.05690422,1.745306349,44.10225346,1.726557918,49.06400251,1.744991128,55.81569331,1.754176356
+,,22.80516722,1.293874272,22.97542992,1.663929131,27.19479062,1.663707,29.73379522,1.745683319,35.7217881,1.745429712,39.25106158,1.735983508,44.21173681,1.717338597,49.30790656,1.735669971,56.09316096,1.744806134
+,,22.91853491,1.28696283,23.14696379,1.655037731,27.32997974,1.654820036,29.88160609,1.727090201,35.89936613,1.736106212,39.44618412,1.726710467,44.54182032,1.708161796,49.55302309,1.726398604,56.37200794,1.735485965
+,,23.03246616,1.280088306,23.26203059,1.646197074,27.46584091,1.645980542,30.03015175,1.717864665,36.07782692,1.726832515,39.64227664,1.717486958,44.87436821,1.699034033,49.79935812,1.717176762,56.65224111,1.726215581
+,,23.14696379,1.273250504,23.31977833,1.637406857,27.60237746,1.637188266,30.17943586,1.708688408,36.25717486,1.717608355,39.83934396,1.708312719,45.097445,1.689958363,50.17115864,1.708000826,56.93386735,1.707829813
+,,23.20442587,1.266451713,23.43570422,1.628660378,27.73959275,1.628442956,30.32946207,1.699561167,36.43741437,1.708433467,40.03739093,1.699187486,45.32163073,1.680931172,50.54573501,1.698873923,56.93386735,1.716994716
+,,23.31977833,1.259686753,23.55220639,1.619960621,27.87749016,1.615415673,30.48023408,1.690482682,36.61854987,1.699307589,40.23642242,1.690110996,45.54693092,1.671952202,50.79700495,1.689799109,57.2168936,1.698707159
+,,23.43570422,1.252957929,23.61067448,1.611310498,28.01607308,1.606786664,30.63175561,1.68145269,36.80058583,1.690230458,40.43644333,1.68108299,45.77335111,1.663021194,51.049524,1.680772769,57.50132681,1.689633235
+,,23.49388309,1.246267495,23.72804646,1.602703418,28.22524024,1.593929499,30.78403037,1.672470934,36.9835267,1.681201813,40.63745857,1.672103209,46.00089687,1.654137893,51.30329835,1.671794644,57.78717398,1.680607781
+,,23.61067448,1.239610352,23.84600191,1.594142314,28.36555188,1.585415263,30.9370621,1.663537155,37.16737701,1.672221397,40.83947308,1.663171394,46.22957378,1.645302043,51.55833425,1.662864478,58.07444214,1.671630538
+,,23.72804646,1.232988769,23.96454374,1.58562694,28.43596904,1.576949602,31.09085458,1.654651098,37.35214126,1.663288951,41.04249183,1.65428729,46.45938749,1.636513391,51.81463797,1.653982014,58.36313834,1.662701248
+,,23.84600191,1.226402557,24.08367485,1.577157053,28.57732824,1.568526066,31.24541159,1.645812507,37.537824,1.65440422,41.24651982,1.645450643,46.69034362,1.627771686,52.07221581,1.645146997,58.6532697,1.653819656
+,,23.96454374,1.219851526,24.20339818,1.568732409,28.71939015,1.560147526,31.40073691,1.637021128,37.72442979,1.645566947,41.45156207,1.641046814,46.92244788,1.619076675,52.3310741,1.636359173,58.94484334,1.644985506
+,,24.08367485,1.213335488,24.32371667,1.560352767,28.86215827,1.551813741,31.55683439,1.628276711,37.91196323,1.636776881,41.6576236,1.632280892,47.15570596,1.610428111,52.59121922,1.627618292,59.23786643,1.636198545
+,,24.1434623,1.206856626,24.44463328,1.552017886,29.00563611,1.547660519,31.71370784,1.619579003,38.10042892,1.628033768,41.8647095,1.623561795,47.39012359,1.601825744,52.85265756,1.618924101,59.53234618,1.627458521
+,,24.32371667,1.200407646,24.56615098,1.543727527,29.1498272,1.535279483,31.87136114,1.610927755,38.2898315,1.619337357,42.07282485,1.610573561,47.62570655,1.593269328,53.11539554,1.610276351,59.68013457,1.618768362
+,,24.44463328,1.193995471,24.68827277,1.535481452,29.29473509,1.527078535,32.02979815,1.602322719,38.48017563,1.6106874,42.28197477,1.601970417,47.86246062,1.584758618,53.37943963,1.601674795,59.9768129,1.610121444
+,,24.56615098,1.187617548,24.81100164,1.527279425,29.44036333,1.518921394,32.18902277,1.593763649,38.67146599,1.602083649,42.4921644,1.593413229,48.10039164,1.576293369,53.64479632,1.593119185,60.27496606,1.601520716
+,,24.62713618,1.181276013,24.99623984,1.519118229,29.58671551,1.510807825,32.34903892,1.585250298,38.86370728,1.593525855,42.70339892,1.58490175,48.33950544,1.567873339,53.91147213,1.584609277,60.57460138,1.592965929
+,,24.74956113,1.174966032,25.12049965,1.511003608,29.73379522,1.502737596,32.50985054,1.576782422,39.05690422,1.585013775,42.91568351,1.576435736,48.57980791,1.559498285,54.17947363,1.576144826,61.02684954,1.584453729
+,,24.87259468,1.168689758,25.24537718,1.502932334,29.88160609,1.49871572,32.67146157,1.56835978,39.25106158,1.576547163,43.1290234,1.568014945,48.82130495,1.551167968,54.4488074,1.567725589,61.33022257,1.575990108
+,,24.99623984,1.162447009,25.3708755,1.494904174,30.03015175,1.486726234,32.83387599,1.559982128,39.44618412,1.568125777,43.34342383,1.559639135,49.06400251,1.542882149,54.71948007,1.559351325,61.63510372,1.567571698
+,,25.12049965,1.156237607,25.5602937,1.486915978,30.17943586,1.478784641,32.9970978,1.551649227,39.64227664,1.559749375,43.55889007,1.551308066,49.30790656,1.534640591,54.99149829,1.551021793,61.94150048,1.559198256
+,,25.18286101,1.150063632,25.68735751,1.478973371,30.32946207,1.47088547,33.16113101,1.543360837,39.83934396,1.551417717,43.77542743,1.543021499,49.55302309,1.526443055,55.26486875,1.542736755,62.24942037,1.550869542
+,,25.30804855,1.143920378,25.81505297,1.471073192,30.48023408,1.463028493,33.32597965,1.535116721,39.93824469,1.543133593,43.99304123,1.534779196,49.79935812,1.518289309,55.53959817,1.534495973,62.55887098,1.542585317
+,,25.43385841,1.137809939,26.00778738,1.463212339,30.63175561,1.455213486,33.49164777,1.526916642,40.13678331,1.534890691,44.21173681,1.52658092,50.04691772,1.510179116,55.81569331,1.52629921,62.86985991,1.534345343
+,,25.62374684,1.131729918,26.07235142,1.455399207,30.78403037,1.447440223,33.65813945,1.518760366,40.33630889,1.52669182,44.43151957,1.518426437,50.29570798,1.502112246,56.09316096,1.518146231,63.18239482,1.526149385
+,,25.75112608,1.125684596,26.26700681,1.447622111,30.9370621,1.439708483,33.74169541,1.510650623,40.53682635,1.518536744,44.65239489,1.510315512,50.54573501,1.494088466,56.37200794,1.510036803,63.49648337,1.517997207
+,,25.81505297,1.119673765,26.39758379,1.439889399,31.09085458,1.435855295,33.90943011,1.502581234,40.7383406,1.510425231,44.87436821,1.502247913,50.67121423,1.486110465,56.65224111,1.501970693,63.81213331,1.509888575
+,,25.94338322,1.113692843,26.52880989,1.432197993,31.24541159,1.424368683,34.1625969,1.494552015,40.94085662,1.502357046,45.097445,1.494223409,50.92310795,1.478172161,56.93386735,1.49394767,64.12935238,1.501823257
+,,26.13707574,1.107741695,26.66068833,1.424547672,31.40073691,1.416760184,34.33242397,1.48656862,41.14437936,1.494331958,45.32163073,1.486241768,51.049524,1.470279148,57.2168936,1.485967502,64.4481484,1.493801021
+,,26.26700681,1.10182451,26.79322235,1.416938216,31.55683439,1.409192326,34.50309527,1.478627869,41.34891385,1.486349738,45.54693092,1.478302763,51.30329835,1.46242541,57.50132681,1.478029962,64.76852919,1.485821637
+,,26.39758379,1.095938933,26.92641522,1.409369407,31.71370784,1.401664893,34.58874882,1.470732422,41.55446511,1.478410156,45.77335111,1.470406166,51.68632724,1.454610768,57.78717398,1.470134822,65.09050264,1.477884876
+,,26.52880989,1.090084795,27.06027022,1.401841028,31.87136114,1.394177669,34.84698738,1.462873391,41.76103819,1.470512985,46.00089687,1.462551749,52.07221581,1.446837884,58.07444214,1.462281855,65.41407667,1.469990511
+,,26.66068833,1.084261928,27.19479062,1.394352864,32.02979815,1.38673044,35.02021665,1.455059212,41.96863817,1.462657998,46.22957378,1.454739289,52.2014845,1.439112187,58.36313834,1.454470836,65.73925923,1.462138315
+,,26.79322235,1.078470164,27.32997974,1.386904699,32.18902277,1.379322991,35.19430706,1.447286774,42.17727017,1.45484497,46.45938749,1.446968559,52.59121922,1.431422122,58.6532697,1.446701541,66.06605832,1.454328062
+,,26.92641522,1.072709338,27.46584091,1.379496319,32.34903892,1.37195511,35.36926291,1.439555853,42.3869393,1.447073676,46.69034362,1.439239339,52.92550969,1.419969426,58.94484334,1.438973746,66.39448197,1.446559529
+,,27.12744703,1.06697719,27.60237746,1.372127512,32.50985054,1.364626586,35.54508848,1.431866229,42.59765072,1.439343894,46.92244788,1.431551405,53.11539554,1.416170612,59.23786643,1.431287231,66.72453827,1.442688006
+,,27.26230138,1.061277756,27.80845598,1.364795388,32.67146157,1.357337209,35.63332876,1.424220476,42.70339892,1.431658212,47.15570596,1.423904537,53.37943963,1.408605904,59.53234618,1.423641775,67.05623531,1.43498165
+,,27.39782611,1.055608766,27.94669572,1.357505109,32.83387599,1.350086769,35.81046704,1.416612768,42.91568351,1.424010774,47.39012359,1.416298517,53.64479632,1.401081603,59.82828984,1.416037158,67.55687516,1.423499233
+,,27.53402455,1.049970058,28.08562267,1.350253772,32.9970978,1.342875058,35.9884859,1.409045697,43.1290234,1.416404186,47.62570655,1.408733125,53.91147213,1.393597495,60.12570467,1.408473163,67.89270987,1.415895377
+,,27.67090005,1.04436147,28.22524024,1.343041169,33.16113101,1.33570187,36.25717486,1.401516296,43.34342383,1.40883823,47.86246062,1.401208146,54.17947363,1.386153365,60.42459799,1.400949571,68.06125277,1.408334904
+,,27.73959275,1.038784881,28.29530909,1.335869716,33.32597965,1.328566999,36.43741437,1.394029866,43.55889007,1.401312689,48.10039164,1.393723362,54.4488074,1.378748999,60.72497715,1.393466169,68.39959481,1.400812051
+,,27.94669572,1.033234012,28.43596904,1.328733948,33.49164777,1.321470239,36.61854987,1.386583426,43.77542743,1.393827347,48.33950544,1.386278559,54.71948007,1.371384184,61.02684954,1.38602274,68.7396188,1.400806551
+,,28.08562267,1.027714823,28.57732824,1.321636297,33.65813945,1.314411389,36.70945501,1.379179471,43.99304123,1.386381989,48.57980791,1.378873524,54.99149829,1.36405871,61.33022257,1.378619071,69.0813331,1.393323912
+,,28.22524024,1.022225115,28.71939015,1.31457656,33.82545879,1.307390244,36.80058583,1.37181505,44.21173681,1.378976401,48.82130495,1.371508044,55.26486875,1.356772366,61.63510372,1.371254951,69.25282673,1.385883964
+,,28.36555188,1.016764731,28.86215827,1.307554533,33.9936099,1.300406604,36.9835267,1.364487274,44.43151957,1.371610372,49.06400251,1.364181908,55.40206317,1.349527592,61.94150048,1.363930167,69.4247461,1.378483743
+,,28.50656102,1.011333515,29.00563611,1.300570015,34.1625969,1.29000356,37.16737701,1.357198641,44.65239489,1.364283689,49.30790656,1.356894906,55.6774746,1.342318869,62.24942037,1.356644509,69.76986626,1.371120345
+,,28.57732824,1.005933285,29.07764228,1.293625346,34.3797478,1.283111394,37.35214126,1.349948941,44.98576833,1.356993479,49.55302309,1.349646829,55.81569331,1.335151273,62.55887098,1.349397769,70.11670207,1.363796281
+,,28.71939015,1.000559927,29.22219132,1.286715233,34.50309527,1.279678713,37.537824,1.342737966,45.32163073,1.349742225,49.79935812,1.342437468,56.09316096,1.328019343,62.86985991,1.342189739,70.56239139,1.360144778
+,,28.86215827,0.995215272,29.36745894,1.279842032,34.674615,1.272843099,37.72442979,1.335565511,45.54693092,1.342532355,50.04691772,1.335266617,56.37200794,1.320925509,63.18239482,1.335020212,70.81555475,1.356506012
+,,29.00563611,0.989899166,29.5134487,1.273005545,34.84698738,1.266043998,37.91196323,1.328431368,45.77335111,1.335360997,50.29570798,1.328134071,56.65224111,1.313869568,63.49648337,1.327888982,70.99135357,1.349262661
+,,29.1498272,0.984611456,29.6601642,1.266205577,35.02021665,1.255915849,38.10042892,1.321335333,46.00089687,1.328227947,50.54573501,1.321039624,56.93386735,1.306851317,63.81213331,1.320795844,71.34426156,1.342055352
+,,29.29473509,0.979351992,29.80760904,1.259441931,35.24281892,1.249205805,38.2898315,1.314277203,46.22957378,1.321132999,50.79700495,1.313983074,57.2168936,1.299870556,64.12935238,1.313740596,71.6989239,1.334886543
+,,29.36745894,0.974122535,29.88160609,1.252716874,35.36926291,1.245863831,38.48017563,1.307256775,46.45938749,1.314075949,51.049524,1.306964217,57.50132681,1.292927083,64.4481484,1.306723034,72.23422592,1.32775342
+,,29.5134487,0.968919099,30.03015175,1.246025281,35.54508848,1.239208844,38.67146599,1.300273848,46.69034362,1.307056596,51.30329835,1.299982852,57.78717398,1.286020701,64.76852919,1.299742958,72.5933124,1.317131605
+,,,,30.17943586,1.239369432,35.7217881,1.232589406,38.86370728,1.293328221,46.80625188,1.300077291,51.55833425,1.289583198,58.07444214,1.279151209,65.09050264,1.292800167,72.95418395,1.31009593
+,,,,30.32946207,1.232749136,35.89936613,1.226005327,38.960186,1.286422221,47.03893233,1.293132714,51.88605929,1.282693278,58.36313834,1.272318413,65.41407667,1.285894462,73.41790943,1.303096416
+,,,,30.40475462,1.226166611,36.07782692,1.219456418,39.05690422,1.279553097,47.15570596,1.286227758,52.07221581,1.279261716,58.6532697,1.265522114,65.73925923,1.279025645,73.68131779,1.299610269
+,,,,30.55590092,1.21961684,36.25717486,1.212942491,39.25106158,1.276128544,47.50776904,1.279354649,52.3310741,1.272428329,58.94484334,1.25876212,66.06605832,1.272193519,73.86423084,1.292670725
+,,,,30.7077986,1.213102056,36.43741437,1.206463359,39.50055676,1.269310509,47.74393683,1.272520766,52.59121922,1.265631444,59.23786643,1.252038235,66.39448197,1.265397888,74.04759797,1.285768236
+,,,,30.86045138,1.206622072,36.61854987,1.200018836,39.64227664,1.265914749,47.98127865,1.265723387,52.85265756,1.255506595,59.53234618,1.245350267,66.72453827,1.258638557,74.41569898,1.285763187
+,,,,31.01386301,1.200176702,36.80058583,1.193608738,39.83934396,1.252431604,48.21980032,1.258962317,53.18860983,1.248798738,59.82828984,1.238698023,67.05623531,1.251915332,74.78562987,1.278895072
+,,,,31.09085458,1.193768104,36.9835267,1.187232881,39.83934396,1.259152657,48.57980791,1.252234904,53.37943963,1.245457853,60.12570467,1.232081314,67.38958128,1.24522802,75.15739973,1.272063643
+,,,,31.16803728,1.187393726,37.16737701,1.180891081,40.03739093,1.245741535,48.82130495,1.245545885,53.64479632,1.238805035,60.42459799,1.225499949,67.72458435,1.23857643,75.53101772,1.261887338
+,,,,31.32297797,1.181051067,37.35214126,1.174583157,40.23642242,1.239087201,48.9425033,1.238895029,53.91147213,1.232187754,60.72497715,1.218953739,68.06125277,1.23196037,76.01112257,1.25514539
+,,,,31.47868889,1.174742289,37.537824,1.168308928,40.43644333,1.23577095,49.18580335,1.232277268,54.17947363,1.22560582,61.02684954,1.212442497,68.39959481,1.225379651,76.28383485,1.251787526
+,,,,31.63517388,1.16846721,37.72442979,1.162068213,40.69347326,1.229168535,49.43031289,1.225694856,54.4488074,1.219059045,61.33022257,1.205966036,68.7396188,1.218834084,76.66305251,1.245100897
+,,,,31.79243677,1.16222565,37.91196323,1.155860835,40.83947308,1.225880167,49.79935812,1.219145211,54.71948007,1.212547241,61.63510372,1.19952417,69.0813331,1.212323481,76.85336768,1.238452417
+,,,,31.87136114,1.1560197,38.03750315,1.148663044,41.04249183,1.219331926,49.92298447,1.212635327,54.99149829,1.20607022,61.94150048,1.193116714,69.4247461,1.205847656,77.0441553,1.231839438
+,,,,32.02979815,1.14984463,38.10042892,1.143549864,41.24651982,1.212818664,50.17115864,1.206157836,55.26486875,1.199627797,62.24942037,1.186743485,69.76986626,1.199406422,77.42715262,1.231834601
+,,,,32.18902277,1.143702546,38.2898315,1.137441404,41.45156207,1.206340193,50.42056651,1.199714946,55.53959817,1.196417154,62.55887098,1.180404299,70.11670207,1.192999595,77.81205387,1.225254554
+,,,,32.34903892,1.137593271,38.48017563,1.131365574,41.6576236,1.199896329,50.67121423,1.193306471,55.81569331,1.186846008,62.86985991,1.174098975,70.46526204,1.186626992,78.19886851,1.218709655
+,,,,32.59055588,1.131514407,38.67146599,1.125322198,41.8647095,1.193486885,50.92310795,1.186932228,56.09316096,1.180506275,63.18239482,1.167827332,70.81555475,1.180288428,78.58760607,1.212199717
+,,,,32.75256811,1.125470237,38.86370728,1.113336492,42.07282485,1.187111678,51.17625387,1.180592034,56.37200794,1.174200406,63.49648337,1.164701798,71.16758882,1.173983723,78.97827609,1.205724553
+,,,,32.91538572,1.119458353,38.86370728,1.119311105,42.28197477,1.180770526,51.43065821,1.174285708,56.73033059,1.171056538,63.81213331,1.155384371,71.52137289,1.167712696,79.37088819,1.199283977
+,,,,32.9970978,1.113480768,39.05690422,1.107389422,42.4921644,1.174463246,51.68632724,1.168013067,56.93386735,1.167923636,64.12935238,1.149212695,71.87691568,1.161475167,79.76545202,1.192877804
+,,,,33.24345314,1.107530752,39.25106158,1.101474119,42.70339892,1.168189657,51.94326723,1.161773933,57.2168936,1.161684979,64.4481484,1.143073986,72.23422592,1.155270956,80.16197728,1.186505851
+,,,,33.40871102,1.101614695,39.44618412,1.095590414,42.91568351,1.16194958,52.2014845,1.155568126,57.50132681,1.155479648,64.76852919,1.136968068,72.5933124,1.149099886,80.56047373,1.180167935
+,,,,33.57479041,1.095730238,39.64227664,1.089738137,43.1290234,1.155742835,52.46098541,1.149395469,57.86682785,1.146234746,65.09050264,1.130894766,72.95418395,1.14296178,80.96095115,1.173863873
+,,,,33.74169541,1.089877215,39.83934396,1.083917122,43.34342383,1.149569244,52.72177634,1.143255784,58.07444214,1.143168248,65.41407667,1.124853906,73.31684944,1.136856461,81.36341941,1.167593486
+,,,,33.90943011,1.084055457,40.03739093,1.0781272,43.55889007,1.143428631,52.98386369,1.137148895,58.36313834,1.137061827,65.73925923,1.118845314,73.68131779,1.130783756,81.76788839,1.161356594
+,,,,34.07799865,1.078264796,40.23642242,1.072368206,43.77542743,1.137320819,53.24725392,1.131074627,58.6532697,1.130988024,66.06605832,1.112868817,74.04759797,1.124743488,82.17436805,1.155153016
+,,,,34.24740517,1.072505067,40.43644333,1.069498156,43.99304123,1.131245633,53.37943963,1.125035015,58.94484334,1.124946665,66.39448197,1.106924245,74.41569898,1.118735486,82.58286837,1.148982576
+,,,,34.41765383,1.066776105,40.69347326,1.063784095,44.21173681,1.125202898,53.64479632,1.119025455,59.23786643,1.115947272,66.89018119,1.101009266,74.78562987,1.112759576,82.9933994,1.142845097
+,,,,34.58874882,1.061077745,40.83947308,1.060938176,44.43151957,1.119192441,53.91147213,1.113047997,59.53234618,1.107019873,67.22270167,1.095128044,75.15739973,1.106815587,83.19942959,1.136742633
+,,,,34.76069435,1.0497763,41.04249183,1.055271,44.65239489,1.113214091,54.17947363,1.107102467,59.82828984,1.101106544,67.55687516,1.089278237,75.53101772,1.10090335,83.82059404,1.130668316
+,,,,34.76069435,1.055409823,41.24651982,1.049634096,44.87436821,1.107267675,54.4488074,1.101188697,60.12570467,1.101102221,67.89270987,1.083459678,75.90649302,1.095022693,84.23727798,1.124628665
+,,,,34.93349464,1.044168747,41.45156207,1.044027303,45.097445,1.101353022,54.71948007,1.095306517,60.42459799,1.095220502,68.23021407,1.0776722,76.28383485,1.08917345,84.65603332,1.118621276
+,,,,35.10715395,1.038591148,41.6576236,1.041233103,45.32163073,1.095469964,54.99149829,1.089455757,60.57460138,1.08937234,68.7396188,1.071913532,76.66305251,1.08335545,85.07687035,1.112645976
+,,,,35.36926291,1.033041314,41.8647095,1.035671185,45.54693092,1.089618331,55.26486875,1.08363625,61.02684954,1.083551151,69.0813331,1.066187729,77.0441553,1.077568529,85.49979942,1.106702595
+,,,,35.54508848,1.027523154,42.07282485,1.030138977,45.77335111,1.083797955,55.53959817,1.077847828,61.33022257,1.074882916,69.4247461,1.060492512,77.42715262,1.071812519,85.92483093,1.100790961
+,,,,35.7217881,1.02203447,42.28197477,1.02463632,46.00089687,1.07800867,55.81569331,1.072090327,61.63510372,1.069141252,69.76986626,1.054827717,77.81205387,1.066087256,86.35197532,1.094910904
+,,,,35.89936613,1.016575105,42.4921644,1.019163057,46.22957378,1.072250309,56.09316096,1.06636358,61.94150048,1.060588293,70.11670207,1.049193181,78.19886851,1.060392576,86.78124312,1.089062258
+,,,,35.9884859,1.011146887,42.70339892,1.01371903,46.45938749,1.066522708,56.37200794,1.060667423,62.24942037,1.054922986,70.46526204,1.043588743,78.58760607,1.054728314,87.21264486,1.083244852
+,,,,36.25717486,1.005743705,42.91568351,1.008304083,46.69034362,1.060825701,56.65224111,1.055001694,62.55887098,1.052099626,70.81555475,1.038014242,78.97827609,1.049094309,87.64619117,1.077458522
+,,,,36.34718289,1.000373323,43.1290234,1.00291806,46.92244788,1.055159126,56.93386735,1.049366228,62.86985991,1.046479662,71.16758882,1.032469518,79.37088819,1.0434904,88.08189269,1.0717031
+,,,,36.61854987,0.995027711,43.34342383,0.997560809,47.15570596,1.04952282,57.2168936,1.043760866,63.18239482,1.038107993,71.52137289,1.026954412,79.76545202,1.037916424,88.51976015,1.065978421
+,,,,36.80058583,0.989712607,43.55889007,0.989580482,47.39012359,1.043916621,57.50132681,1.038185446,63.49648337,1.032562768,71.87691568,1.021468766,80.16197728,1.032372222,88.9598043,1.060284322
+,,,,36.9835267,0.984425894,43.77542743,0.984294475,47.62570655,1.038340369,57.78717398,1.032639807,63.81213331,1.027047164,72.23422592,1.016012423,80.56047373,1.026857636,89.40203598,1.054620639
+,,,,37.16737701,0.979167421,43.99304123,0.979036704,47.86246062,1.032793903,58.07444214,1.027123792,64.12935238,1.021561023,72.5933124,1.010585225,80.96095115,1.021372507,89.84646606,1.048987209
+,,,,37.35214126,0.973937037,44.21173681,0.973807018,48.10039164,1.027277064,58.36313834,1.021637241,64.4481484,1.018826951,72.95418395,1.005187018,81.36341941,1.015916678,90.29310546,1.043383871
+,,,,37.44486753,0.968736494,44.43151957,0.968605268,48.33950544,1.021789694,58.79887579,1.016178002,64.76852919,1.013384719,73.31684944,0.999817646,81.76788839,1.010489992,90.74196516,1.037810465
+,,,,37.63101123,0.963561829,44.65239489,0.963431304,48.57980791,1.016331637,59.09117325,1.01074992,65.09050264,1.007971558,73.68131779,0.994476955,82.17436805,1.005092293,91.19305621,1.032266829
+,,,,,,,,48.82130495,1.010902734,59.38492377,1.005350833,65.41407667,0.999907947,74.04759797,0.989164793,82.58286837,0.999723427,91.6463897,1.026752806
+,,,,,,,,49.06400251,1.005502831,59.68013457,0.999980586,65.73925923,0.994566774,74.41569898,0.983881007,82.9933994,0.99438324,92.10197677,1.021268237
+,,,,,,,,49.30790656,1.000131772,59.9768129,0.994639026,66.06605832,0.989254132,74.78562987,0.978625444,83.40597125,0.989071578,92.55982863,1.015812965
+,,,,,,,,49.55302309,0.994789403,60.42459799,0.989324055,66.39448197,0.983969868,75.15739973,0.973397955,83.82059404,0.98378829,93.01995653,1.010386833
+,,,,,,,,49.79935812,0.989475572,60.72497715,0.984039418,66.72453827,0.978713831,75.53101772,0.96819839,84.23727798,0.978533223,93.4823718,1.004989685
+,,,,,,,,50.04691772,0.984190125,60.87572622,0.978784931,67.05623531,0.97348587,,,84.65603332,0.973306227,93.9470858,0.999621367
+,,,,,,,,50.29570798,0.978932912,61.02684954,0.973558502,67.38958128,0.968285835,,,85.07687035,0.968107151,94.41410995,0.994281725
+,,,,,,,,50.54573501,0.973703781,61.38093117,0.96641588,67.72458435,0.963113577,,,85.49979942,0.962935848,94.88345575,0.988970606
+,,,,,,,,50.79700495,0.968502582,,,67.89270987,0.957970828,,,,,95.35513473,0.983687857
+,,,,,,,,51.049524,0.963329166,,,,,,,,,95.82915849,0.978433326
+,,,,,,,,,,,,,,,,,,96.3055387,0.973206863
+,,,,,,,,,,,,,,,,,,96.78428705,0.968008319
+,,,,,,,,,,,,,,,,,,97.26541533,0.962837543
\ No newline at end of file
diff --git a/Assignments/A2/A2Soln/src/input b/Assignments/A2/A2Soln/src/input
new file mode 100644
index 0000000000000000000000000000000000000000..aba70b22dec37d1badb9edd77f1611aa70a0be43
--- /dev/null
+++ b/Assignments/A2/A2Soln/src/input
@@ -0,0 +1,7 @@
+1,2,3
+1,2,2
+1,1,1,5,1,10
+2,2,1.5,7,2,40
+3,3,2,20,3,100
+,,2.5,40,,
+,,3,78,,
\ No newline at end of file
diff --git a/Assignments/A2/A2Soln/src/test_All.py b/Assignments/A2/A2Soln/src/test_All.py
new file mode 100644
index 0000000000000000000000000000000000000000..e4d87189ad3f1db51560ee775837f7efbea825c9
--- /dev/null
+++ b/Assignments/A2/A2Soln/src/test_All.py
@@ -0,0 +1,228 @@
+from CurveADT import *
+import Data
+import Load
+import Plot
+import Exceptions
+import SeqServices
+
+from pytest import *
+
+class TestCurveADT:
+  def test_minD(self):
+    curve = CurveT([0, 50, 99], [1, 2, 3], 1)
+    assert curve.minD() == 0
+
+  def test_maxD(self):
+    curve = CurveT([0, 50, 99], [1, 2, 3], 1)
+    assert curve.maxD() == 99
+    
+  def test_order(self):
+    curve = CurveT([0, 50, 99], [1, 2, 3], 1)
+    assert curve.order() == 1
+
+  def test_raises_indepVarNotAscending(self):
+    with raises(Exceptions.IndepVarNotAscending):
+      CurveT([ 0, -1 ], [ 0, 0 ], 1)
+    
+  def test_raises_SeqSizeMismatch(self):
+    with raises(Exceptions.SeqSizeMismatch):
+      CurveT([ 0 ], [ 0, 0 ], 1)
+
+  def test_raises_OutOfDomain_eval_below(self):
+    curve = CurveT([ 0, 1, 2 ], [ 0, 0, 0 ], 1)
+    with raises(Exceptions.OutOfDomain):
+      curve.eval(-1)
+
+  def test_raises_OutOfDomain_eval_above(self):
+    curve = CurveT([ 0, 1, 2 ], [ 0, 0, 0 ], 1)
+    with raises(Exceptions.OutOfDomain):
+      curve.eval(3)
+
+  def test_raises_OutOfDomain_dfdx_below(self):
+    curve = CurveT([ 0, 1, 2 ], [ 0, 0, 0 ], 1)
+    with raises(Exceptions.OutOfDomain):
+      curve.dfdx(-1)
+
+  def test_raises_OutOfDomain_dfdx_above(self):
+    curve = CurveT([ 0, 1, 2 ], [ 0, 0, 0 ], 1)
+    with raises(Exceptions.OutOfDomain):
+      curve.dfdx(3)
+
+  def test_raises_OutOfDomain_d2fdx2_below(self):
+    curve = CurveT([ 0, 1, 2 ], [ 0, 0, 0 ], 1)
+    with raises(Exceptions.OutOfDomain):
+      curve.d2fdx2(-1)
+
+  def test_raises_OutOfDomain_d2fdx2_above(self):
+    curve = CurveT([ 0, 1, 2 ], [ 0, 0, 0 ], 1)
+    with raises(Exceptions.OutOfDomain):
+      curve.d2fdx2(3)
+
+  def test_eval_linear(self):
+    curve = CurveT([0, 1, 3], [0, 1, 3], 1)
+    assert curve.eval(2) == approx(2, 0.1)
+    
+  def test_eval_quadratic(self):
+    curve = CurveT([0, 1, 2], [1, 0, 1], 2)
+    assert curve.eval(0.5) == approx(1.25, 0.1)
+
+  def test_dfdx(self):
+    curve = CurveT([0, 1], [0, 1000], 1)
+    assert curve.dfdx(0) == approx(1, 0.0001)
+
+  def test_dfdx_2(self):
+    curve = CurveT([0, 1], [0, 1], 1)
+    assert curve.dfdx(0) == approx(0.001, 0.0001)
+
+  def test_d2fdx2(self):
+    curve = CurveT([0, 1], [0, 1], 1)
+    assert curve.d2fdx2(0) == approx(0, 0.0001)
+
+  def test_d2fdx2_2(self):
+    curve = CurveT([0, 1], [0, 1000], 1)
+    assert curve.d2fdx2(0) == approx(0, 0.0001)
+
+class TestData:
+  def test_constructor_S(self):
+    Data.Data.init()
+    assert Data.Data.S == []
+
+  def test_constructor_Z(self):
+    Data.Data.init()
+    assert Data.Data.Z == []
+
+  def test_constructor_MAX(self):
+    Data.Data.init()
+    assert Data.Data.MAX_SIZE == 10
+
+  def test_add(self):
+    Data.Data.init()
+    test_curve_a = CurveT([0,1,2], [0,1,2], 1)
+    test_curve_b = CurveT([0,1,2], [0,1,2], 1)
+    Data.Data.add(test_curve_a, 0)
+    Data.Data.add(test_curve_b, 1)
+    assert Data.Data.S[0] == test_curve_a
+    assert Data.Data.S[1] == test_curve_b
+
+  def test_add_full_exception(self):
+    Data.Data.init()
+    test_curve_a = CurveT([0,1,2], [0,1,2], 1)
+    with raises(Full):
+      for x in range(11):
+        Data.Data.add(test_curve_a, x)
+
+  def test_getC(self):
+    Data.Data.init()
+    test_curve_a = CurveT([0,1,2], [0,1,2], 1)
+    test_curve_b = CurveT([0,1,2], [0,1,2], 1)
+    Data.Data.add(test_curve_a, 0)
+    Data.Data.add(test_curve_b, 1)
+    assert Data.Data.getC(0) == test_curve_a
+    assert Data.Data.getC(1) == test_curve_b
+
+  def test_getC_empty(self):
+    Data.Data.init()
+    with raises(InvalidIndex): 
+      Data.Data.getC(0)
+
+  def test_getC_invalid_index_below(self):
+    Data.Data.init()
+    test_curve_a = CurveT([0,1,2], [0,1,2], 1)
+    test_curve_b = CurveT([0,1,2], [0,1,2], 1)
+    Data.Data.add(test_curve_a, 0)
+    Data.Data.add(test_curve_b, 1)
+    with raises(InvalidIndex):
+      Data.Data.getC(-1)
+
+  def test_getC_invalid_index_above(self):
+    Data.Data.init()
+    test_curve_a = CurveT([0,1,2], [0,1,2], 1)
+    test_curve_b = CurveT([0,1,2], [0,1,2], 1)
+    Data.Data.add(test_curve_a, 0)
+    Data.Data.add(test_curve_b, 1)
+    with raises(InvalidIndex):
+      Data.Data.getC(2)
+
+  def test_add_IndepVarNotAscending_exception(self):
+    Data.Data.init()
+    test_curve_a = CurveT([-1], [-1], 1)
+    Data.Data.add(test_curve_a, 3)
+    with raises(IndepVarNotAscending):
+      Data.Data.add(test_curve_a, 1)
+
+  def test_eval(self):
+    Data.Data.init()
+    test_curve_a = CurveT([0,1,2,3], [0,1,2,3], 1)
+    test_curve_b = CurveT([0,1,2,3], [1,2,3,4], 1)
+    Data.Data.add(test_curve_a, 0)
+    Data.Data.add(test_curve_b, 1)
+    assert Data.Data.eval(1, 0) == approx(1, 0.005)
+
+  def test_eval_OutOfDomain_exception(self):
+    Data.Data.init()
+    test_curve_a = CurveT([0,1,2,3], [0,1,2,3], 1)
+    test_curve_b = CurveT([0,1,2,3], [1,2,3,4], 1)
+    Data.Data.add(test_curve_a, 0)
+    Data.Data.add(test_curve_b, 1)
+    with raises(OutOfDomain):
+      Data.Data.eval(0, 4)
+
+  def test_slice(self):
+    Data.Data.init()
+    test_curve_a = CurveT([0,1,2,3], [0,1,2,3], 1)
+    test_curve_b = CurveT([0,1,2,3], [1,2,3,4], 1)
+    Data.Data.add(test_curve_a, 0)
+    Data.Data.add(test_curve_b, 1)
+    new_curve = Data.Data.slice(1, 1)
+    assert new_curve.minD()  == 0
+    assert new_curve.maxD()  == 1
+    assert new_curve.order() == 1
+
+class TestSeqServices:
+  def test_index(self):
+    assert SeqServices.index([1,2,3,4,5,6], 3.5) == 2
+    assert SeqServices.index([1,2], 1.5) == 0
+
+  def test_is_ascending_empty(self):
+    assert SeqServices.isAscending([])
+
+  def test_isAscending_unit(self):
+    assert SeqServices.isAscending([ 1 ])
+
+  def test_isAscending_two(self):
+    assert SeqServices.isAscending([ 1, 2 ])
+
+  def test_isAscending_repeat(self):
+    assert SeqServices.isAscending([ 0, 0, 0 ])
+
+  def test_isAscending_descending(self):
+    assert not SeqServices.isAscending([ 2, 1, 0 ])
+
+  def test_isInBounds(self):
+    assert SeqServices.isInBounds([ 1, 2 ], 1.5)
+    assert SeqServices.isInBounds([ 1, 2 ], 2)
+    assert SeqServices.isInBounds([ 1 ], 1)
+
+  def test_isInBounds_below(self):
+    assert not SeqServices.isInBounds([ 1, 2 ], 0.9999)
+
+  def test_isInBounds_In(self):
+    assert SeqServices.isInBounds([ 1, 2 ], 1.000)
+    assert SeqServices.isInBounds([ 1, 2 ], 1.00001)
+    assert SeqServices.isInBounds([ 1, 2 ], 1.9999)
+    assert SeqServices.isInBounds([ 1, 2 ], 1.5)
+
+  def test_isInBounds_above(self):
+    assert not SeqServices.isInBounds([ 1, 2 ], 2.0001)
+
+  def test_isInBounds_negative(self):
+    assert not SeqServices.isInBounds([ 1, 2 ], -1)
+    assert not SeqServices.isInBounds([ 1, 2 ], -2)
+
+  def test_interpLin(self):
+    assert SeqServices.interpLin(0, 1, 1, 2, 0.5) == 1.5
+
+  def test_interpQuad(self):
+    # -3.5 + 2.875x + 1.01786x^2
+    assert SeqServices.interpQuad(0, -3.5, 1, 0.39286, 2, 6.32144, 3) == approx(14.2857, 0.0001)
+  
\ No newline at end of file